多进程应用
安卓应用程序可能拥有一个或多个进程。您可以选择在主进程之外运行服务或活动。为此,请在您的 process 或 activity 中添加 android:process
属性。按照下列方式更新安卓 manifest 文件中的定义:
<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 当前不支持应用中一个进程以上的跟踪。如果您的应用采用多进程,那么您可以在 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 文件中变更 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 实例,因为安卓中不同进程的内存空间也不同。进行这种操作会导致无法预测的 SDK 行为。我们建议您进行如下操作之一:
- 始终为多进程应用设置主进程名称。
- 确保仅在单一进程中使用 Adjust SDK。