멀티 프로세스 앱

Android 앱은 1개 또는 1개 이상의 프로세스로 구성될 수 있습니다. 따라서, 메인 프로세스가 아닌 다른 프로세스에서 서비스나 활동을 진행할 수 있습니다. 이를 활용하려면 프로세스나 액티비티 내에 android:process 속성을 추가합니다. 이후 Android 매니페스트 파일 내에서 정의를 다음과 같이 업데이트합니다:

<activity     android:name=".YourActivity"     android:process=":YourProcessName">
</activity>
<service     android:name=".YourService"     android:process=":YourProcessName">
</service>

서비스와 액티비티를 이렇게 정의하면, 메인 프로세스가 아닌 다른 프로세스에서 서비스와 액티비티가 진행됩니다.

기본 설정에 따라 메인 프로세스의 이름은 앱 패키지 이름과 동일합니다. 앱 패키지 이름이 com.example.myapp라면, 메인 프로세스 이름도 이와 동일할 것입니다. 즉, YourActivityYourServicecom.example.myapp:YourProcessName라는 이름의 프로세스에서 진행될 것입니다.

Adjust SDK는 현재로서 한 앱에서 1개 이상의 프로세스 트래킹은 지원하지 않습니다. 앱이 멀티 프로세스를 사용한다면 메인 프로세스 이름을 AdjustConfig 객체에서 설정해야 합니다.

String appToken = "{YourAppToken}";
String environment = AdjustConfig.ENVIRONMENT_SANDBOX;  // or AdjustConfig.ENVIRONMENT_PRODUCTION

AdjustConfig config = new AdjustConfig(this, appToken, environment);
config.setProcessName("com.example.myapp");

Adjust.onCreate(config);

메인 프로세스의 이름은 변경 가능합니다. 이름을 변경하려면 매니페스트 파일에서 android:process 속성을 변경합니다.

<application   android:name=".YourApp"   android:icon="@drawable/ic_launcher"   android:label="@string/app_name"   android:theme="@style/AppTheme"   android:process=":YourMainProcessName">
</application>

메인 프로세스 이름을 위와 같이 설정했다면, 이를 AdjustConfig 객체에서도 설정해야 합니다.

config.setProcessName("com.example.myapp:YourMainProcessName");

이는 Adjust SDK에 메인 프로세스 이름에 대해 알릴 것입니다. SDK는 메인 프로세스 외의 프로세스는 초기화하지 않을 것입니다. 다른 프로세스에 대해 SDK를 사용하려 한다면, 다음의 로그 메시지가 나타날 것입니다,

05-06 17:15:06.885    8743-8743/com.example.myapp:YourProcessName I/Adjust﹕ Skipping initialization in background process (com.example.myapp:YourProcessName)

프로세스 이름을 설정하지 않고 멀티 프로세스에서 SDK를 호출하면, SDK의 멀티 인스턴스를 초기화하게 됩니다. 이는 Android의 각기 다른 프로세스들이 동일한 메모리 공간을 공유하지 않기 때문입니다. 이는 예측하지 못한 행동을 야기할 수 있습니다. Adjust는 다음 중 하나의 방법을 권장합니다:

  1. 멀티 프로세스 앱에 대해 항상 메인 프로세스 이름을 설정합니다.
  2. 1개 이상의 프로세스에서 Adjust SDK를 사용하지 않습니다.