Android application中的OnCreate方法

2022-09-19  本文已影响0人  懵懵懂懂_YOYO

在Application中开启了一个子线程,但是每次子线程都会执行两次.
解释一下,每个android应用都要运行在一个虚拟机上,”某三方SDK“采用Service和后台服务器通信进行通信,于是和原本的Activity就形成了多进程。一个前台的应用进程,一个service后台进程,每个进程对应一个application对象,所以当应用配置了多个进程的时候,application对象的onCreate方法就会执行多次,所以为了保证只初始化一次,就必须做出区分的处理的(“某三方SDK”中提到的在Activity或Service中初始,这种做法个人认为也是存在多次初始化的风险的);

进程名是通过Manifest.xml中的"android:process"属性设置的,因此可以在application的onCreate方法中通过pid获取processName,再做进一步的判断(跟android:process的值进行判断)使得相关初始化代码仅执行一次。

在application中添加如下代码:

    @Override
    public void onCreate() {
        //规避app启动后执行俩次
        String processName = getProcessName(this, android.os.Process.myPid());
        if (processName != null) {
            boolean defaultProcess = processName.equals("cn.pinming.aiinspection");
            if (defaultProcess) {
                //当前应用的初始化
                initBaiduLocation();
            }
        }

    }
    /**
     * @param cxt
     * @param pid
     * @return 获取进程名称
     */
    public static String getProcessName(Context cxt, int pid) {
        ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
        if (runningApps == null) {
            return null;
        }
        for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
            if (procInfo.pid == pid) {
                return procInfo.processName;
            }
        }
        return null;
    }
上一篇 下一篇

猜你喜欢

热点阅读