前言
如果一个apk中在设置多进程,也就是在AndroidManifest.xml中,通过android:process属性配置。
<activity android:name=".OneActivity" android:exported="true" android:launchMode="singleInstance"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Twoctivity" android:exported="true" android:launchMode="singleInstance" android:process=":another_process"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
配置下面属性,表示OneActivity和Twoctivity在不同的进程中。
android:process=":another_process"
配置后,重写Application就会执行两次onCreate()并重新初始化了,但我不需要初始化两次。
正文
解决方法,就是对进程包名判断,下面是我测试通过的一种。
代码片段
在Application中
@Override public void onCreate() { super.onCreate(); if (TextUtils.equals(getCurrentProcessName(this), getPackageName())) { //做初始化操作 } }
private String getCurrentProcessName(Context context) { int myPid = android.os.Process.myPid(); ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); for (ActivityManager.RunningAppProcessInfo runningAppProcessInfo : mActivityManager.getRunningAppProcesses()) { if (runningAppProcessInfo.pid == myPid) { return runningAppProcessInfo.processName; } } return null; }
日志打印
调试中特意打印了包名
#第一次 getPackageName() : com.biumall.media getCurrentProcessName() : com.biumall.media #第二次 getPackageName() : com.biumall.media getCurrentProcessName() : com.biumall.media:another_process
我们的初始化是getPackageName()和getCurrentProcessName()获取的是一样时
参考文章
《
© 版权声明