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;
}