关于Android中的onCreate()多次被调用导致bindService被多次调用的问题

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/50511776                 最近在做公司项目的时候,遇到了一个很怪的问题,就是Application的onCreate()方法多次被调用,   导致bindService被多次调用,以致于程序出现ANR。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/50511776
                最近在做公司项目的时候,遇到了一个很怪的问题,就是Application的onCreate()方法多次被调用,
   导致bindService被多次调用,以致于程序出现ANR。
   
   问题描述:
            用于某些需要,我在onCreate()方法中bindService,产生ANR。
   说明部分:
           每个android应用都要运行在一个虚拟机上,当应用配置了两个进程时,其实是有两个虚拟机在运行,一个前台的应用进程,一个service后台进程,每个进程对应一个application对象,所以当应用配置了多个进程的时候,application对象的onCreate方法就会执行多次,所以如果在application的onCreate方法中开启轮询或者初始化大量数据时,其实是要做出区分的处理的.
   

   解决方法:

   我们已经知道每个进程对应一个application对象,为了避免浪费资源,我们可以在application中通过进程的名称来区分具体应该

   加载哪些资源,执行哪些具体逻辑。


   

 if (getApplicationInfo().packageName.equals(getCurProcessName(getApplicationContext()))) {
try {
Intent bindIntent = new Intent(this, BJYCBleService.class);
       bindService(bindIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
Log.d("ggggggggggggggg", "消息模板展示");
} catch (Exception e) {
e.printStackTrace();
}
}
}


这样的话,就算onCreate方法多次调用,只会执行该代码块一次。从此 ,bindService就只被调用了一次。
从此消除了ANR。

/*
* 获取正在运行的进程名称
    * @param context
    * @return
    */
public static String getCurProcessName(Context context) {
int pid = android.os.Process.myPid();
ActivityManager activityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo appProcess : activityManager
.getRunningAppProcesses()) {
if (appProcess.pid == pid) {
return appProcess.processName;
}
}
return null;
}


相关文章
|
移动开发 Java Android开发
uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
1329 0
uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
|
JavaScript 前端开发 Android开发
JS(Javascript)调用Android原生方法三步走
JS(Javascript)调用Android原生方法三步走
462 0
|
Java Android开发
android 接入USB输入设备后应用重跑onCreate
android 接入USB输入设备后应用重跑onCreate
90 0
|
JavaScript Android开发 iOS开发
html通过js调用ios或android代码
html通过js调用ios或android代码
57 0
|
Android开发
Android Studio中添加Flutter模板直接调用
Android Studio中添加Flutter模板直接调用
153 0
Android Studio中添加Flutter模板直接调用
|
Android开发
Android实现调用系统相机录像及实现录音
Android实现调用系统相机录像及实现录音
581 0
|
Java 编译器 API
Android使用NDK(从java调用本地函数'JNI')
Android使用NDK(从java调用本地函数'JNI')
190 0
Android使用NDK(从java调用本地函数'JNI')
|
JavaScript Android开发 iOS开发
html通过js调用ios或android代码
html通过js调用ios或android代码
|
定位技术 开发工具 Android开发
Android 地图导航调用百度地图、高德地图、腾讯地图
Android 地图导航调用百度地图、高德地图、腾讯地图
1047 0
Android 地图导航调用百度地图、高德地图、腾讯地图
|
Android开发
Android面试题:bindService获取代理是同步还是异步
Android面试题:bindService获取代理是同步还是异步
373 0
Android面试题:bindService获取代理是同步还是异步