Application的onCreate方法被调用多次

问题:

游戏接入sdk的自定义的Application时,发现Application的onCreate方法被调用了两次,导致设备的激活数据请求了两次,影响激活数据的统计。

原因:

每个android应用都要运行在一个虚拟机上,当应用配置了两个进程时,其实是有两个虚拟机在运行,一个前台的应用进程,一个service后台进程,每个进程对应一个application对象,所以当应用配置了多个进程的时候,application对象的onCreate方法就会执行多次,所以如果在application的onCreate方法中开启轮询或者初始化大量数据时,其实是要做出区分的处理的
 

解决:

我们已经知道每个进程对应一个application对象,为了避免请求两次激活,我们可以在application中通过进程的名称来判断只执行一次激活接口就行。

/**
 * 获得当前进程的名字
 *
 * @param context
 * @return 进程号
 */
private static String getCurProcessName(Context context) {

    int pid = android.os.Process.myPid();
    Log.e("tag","===进程id==:"+pid);

    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

    for (ActivityManager.RunningAppProcessInfo appProcess : activityManager
            .getRunningAppProcesses()) {

        if (appProcess.pid == pid) {
            return appProcess.processName;
        }
    }
    return null;
}
/**
 * 判断是否是当前同一线程
 * @param context
 * @return
 */
public static boolean isCurProcess(Context context){
    if(!TextUtils.isEmpty(getCurProcessName(context))) {
        if (getCurProcessName(context).equals(context.getPackageName())) {
           Log.e("tag","===进程==:"+getCurProcessName(context));
            return true;
        }
    }else{
        return false;
    }
    return false;
}

判断调用激活接口

if(ConfigUtil.isCurProcess(context)){
   activeGameData();
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值