多进程应用

安卓应用程序可能拥有一个或多个进程。您可以选择在主进程之外运行服务或活动。为此,请在您的 process 或 activity 中添加 android:process 属性。按照下列方式更新安卓 manifest 文件中的定义:

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

进行上述定义后,您就可强制服务和活动在主进程之外的其他进程中运行。

在默认状态下,您的主进程名称与应用包名称相同。例如,如果应用包名称为 com.example.myapp,那么您的主进程也会采用相同的名称。也就是说,YourActivityYourService 会在名为 com.example.myapp:YourProcessName 的进程中运行。

Adjust SDK 当前不支持应用中一个进程以上的跟踪。如果您的应用采用多进程,那么您可以在 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);

您可以变更主进程名称。请在 manifest 文件中变更 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 实例,因为安卓中不同进程的内存空间也不同。进行这种操作会导致无法预测的 SDK 行为。我们建议您进行如下操作之一:

  1. 始终为多进程应用设置主进程名称。
  2. 确保仅在单一进程中使用 Adjust SDK。