最近项目中用到推送功能,选择接入极光推送,可是根据官方文档接入之后,app一启动过一会就闪退,而且是必闪退,翻来覆去看了几遍文档,没有遗漏都开始怀疑人生了。
然后定位问题,把极光推送初始化方法注释就不会闪退,问题就在初始化方法这里,最后终于发现问题,因为极光推送中可能会配置开启其他进程,有可能Application onCreate会执行多次,那么极光推送初始化方法会执行多次,导致崩溃,根据这个思路,我们要避免极光推送初始化方法执行多次,判断是UI进程才执行初始化方法,加入判断之后果然不闪退了。
public class MyApplication extends BaseApplication {
@Override
public void onCreate() {
super.onCreate();
//判断只在UI进程执行初始化方法
if (isUIProcess()) {
JPushInterface.setDebugMode(true);
JPushInterface.init(this);
}
}
}
/**
* 判断是否是UI进程
*
* @return
*/
public boolean isUIProcess() {
int pid = android.os.Process.myPid();
String processName = "";
ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo runningAppProcessInfo : activityManager.getRunningAppProcesses()) {
if (runningAppProcessInfo.pid == pid) {
processName = runningAppProcessInfo.processName;
break;
}
}
return TextUtils.equals(getPackageName(), processName);
}
|