偶然发现我自定义的application中方法被调用了两次,看了一下配置文件发现百度的定位service使用了一个单独的进程:
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote">
<intent-filter>
<action android:name="com.baidu.location.service_v2.2" />
</intent-filter>
</service>
导致了application的多次创建。
解决办法:判断当前进程,选择不同的进程做对应的初始化操作即可。
/**
* 获取进程名
* @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;
}
然后可以在oncreate方法里进行判断:
public void onCreate() {
super.onCreate();
String curProcess = getProcessName(this, Process.myPid());
if (!getPackageName().equals(curProcess)) {
return;
}
....操作
}