关于Android中的onCreate()多次被调用导致bindService被多次调用的问题
2016-01-13 16:45
721 查看
最近在做公司项目的时候,遇到了一个很怪的问题,就是Application的onCreate()方法多次被调用,
导致bindService被多次调用,以致于程序出现ANR。
问题描述:
用于某些需要,我在onCreate()方法中bindService,产生ANR。
说明部分:
每个android应用都要运行在一个虚拟机上,当应用配置了两个进程时,其实是有两个虚拟机在运行,一个前台的应用进程,一个service后台进程,每个进程对应一个application对象,所以当应用配置了多个进程的时候,application对象的onCreate方法就会执行多次,所以如果在application的onCreate方法中开启轮询或者初始化大量数据时,其实是要做出区分的处理的.
解决方法:
我们已经知道每个进程对应一个application对象,为了避免浪费资源,我们可以在application中通过进程的名称来区分具体应该
加载哪些资源,执行哪些具体逻辑。
这样的话,就算onCreate方法多次调用,只会执行该代码块一次。从此 ,bindService就只被调用了一次。
从此消除了ANR。
导致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; }
相关文章推荐
- Android String操作
- Android之实现QQ好友分组(ExpandableListView)
- Android Studio乱码问题
- Android5.0 材质设计(纸墨设计)中的z轴理念
- android四大组件---Activity
- Android 蓝牙打印机Service Intent must be explicit
- Android百度定位SDK,返回error code:162 latitude:4.9E-32
- Android开发笔记图片缓存 手势及OOM分析
- Android设置未读消息提示,BadgeView
- Ubuntu下Android开发——配置环境,刷机,push
- 【Android】Android Studio快捷键
- PackageManagerService(Android5.1)深入分析(三)扫描应用目录
- android报错
- 关键词随机飞入飞出效果
- Android开发笔记(四十六)手机相关事件
- android 右滑关闭activity
- android的PowerManager和PowerManager.WakeLock
- Android Studio 使用---(一)Gradle使用手册1
- 关于android instrumentation的理解、使用
- 触碰模式下的listview的选中项背景高亮