最近总遇到启动app后,卡在启动页 ,有的甚至卡死不动。无奈,老板天天催,不得不处理一下。
优化过程当中,发现项目中存在多进程的问题,记得玉刚前辈的书里面说过,多进程,会带来很多奇怪的问题。所以这里,遇到这,我果断想办法处理一下。
补充一下,app启动卡,不只是多进程造成的原因,因为项目中也初始化了很多第三方的sdk,所以启动肯定也会很慢。加上多进程会重复创建application的问题。所以,这里想,主要在主进程中进行第三方的sdk 初始化
首先获取 进程名字
/** * 获取主进程的名字 * @param context * @param pid * @return */ public String getProcessName(Context context, int pid) { ActivityManager service = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); if (service == null) { return null; } List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfos = service.getRunningAppProcesses(); if (runningAppProcessInfos != null && !runningAppProcessInfos.isEmpty()) { for (ActivityManager.RunningAppProcessInfo processInfo : runningAppProcessInfos) { if (processInfo.pid == pid) { return processInfo.processName; } } } return null; }
然后判断是否实主进程 如果是主进程,则在主进程当中进行第三方的sdk 初始化
/** * 判断是否是主进程 * @return */ public boolean isAppMainProcess() { int pid = android.os.Process.myPid(); String processName = getProcessName(getApplicationContext(), pid); if (processName == null) { return false; } else if (getPackageName().equals(processName)) { return true; } else if (getPackageName().equalsIgnoreCase(processName)) { return true; } else { return false; } }