Application多次初始化

Android 91es.com站长2023年8月20日 am8:08发布10个月前更新
0
导航号,我的单页导航
目录

前言

如果一个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()获取的是一样时

参考文章

  1. Application多次初始化问题

版权声明 1、 本站名称 91易搜
2、 本站网址 https://www.91es.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权请留言
4、 本站禁止发布或转载任何违法的相关信息,如有发现请向站长举报
导航号,我的单页导航

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

暂无评论...