マルチプロセスアプリ

Androidアプリは、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);

メインのプロセス名を変更するには、マニフェストファイル内のapplicationandroid: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では複数のプロセスが同じメモリースペースを共有しないためです。しかし、これを行うと予期しない動作が起こる可能性があります。そのため、以下のいずれかを推奨します。

  1. マルチプロセスアプリのためのメインのプロセス名を常に設定する。
  2. 複数のプロセスでAdjust SDKを使用しないようにする。