マルチプロセスアプリ
Androidアプリは、1つ以上のプロセスで構成できます。メインではない方のプロセスでサービスあるいはアクティビティを実行することも可能です。これを行うには、プロセスまたはアクティビティ内でandroid:process
プロパティを追加します。Androidのマニフェストファイル内で、定義を以下のように更新します。
<activity android:name=".YourActivity" android:process=":YourProcessName">
</activity>
<service android:name=".YourService" android:process=":YourProcessName">
</service>
このようにサービスやアクティビティを定義すると、メインプロセスとは別のプロセスで実行させることになります。
デフォルトでは、メインプロセスの名前はアプリのパッケージ名と同じです。アプリのパッケージ名がcom.example.myapp
の場合、メインプロセスもこの名前になります。つまり、YourActivity
とYourService
はcom.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);
メインのプロセス名を変更するには、マニフェストファイル内のapplication
の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:YourProcessNameI/Adjust﹕ Skipping initialization in background process (com.example.myapp:YourProcessName)
プロセス名を設定せずに複数のプロセスでSDKを呼び出す場合、複数のSDKのインスタンスを初期化することになります。これは、Androidでは複数のプロセスが同じメモリースペースを共有しないためです。しかし、これを行うと予期しない動作が起こる可能性があります。そのため、以下のいずれかを推奨します。
- マルチプロセスアプリのためのメインのプロセス名を常に設定する。
- 複数のプロセスでAdjust SDKを使用しないようにする。