Android多进程时Application初始化问题,大坑
来源:互联网 发布:网站网络结构设计 编辑:程序博客网 时间:2024/05/17 03:54
之前在做项目时,遇到一个大坑,就是我的APP 的Application 的onCreate方法,竟然执行了好几次,这就导致我在onCreate里面做了一些初始化的操作被重复执行了,导致奇怪的bug产生。后来冷静下来分析一下,才发现有一些第三方组件,比如百度推送之类的,它们是单独开了一个进程,那么每个进程会自己初始化自己的Application,那自然onCreate方法会多次执行。准确的说就是你的APP里有多少个进程,就会初始化多少次Application 。
但是有的东西就是只需要在Application 的onCreate 里只初始化一次。那怎么解决呢?看代码:
public class MyApplication extends Application { private final static String PROCESS_NAME = "com.test"; private static MyApplication myApplication = null; public static MyApplication getApplication() { return myApplication; } /** * 判断是不是UI主进程,因为有些东西只能在UI主进程初始化 */ public static boolean isAppMainProcess() { try { int pid = android.os.Process.myPid(); String process = getAppNameByPID(MyApplication.getApplication(), pid); if (TextUtils.isEmpty(process)) { return true; } else if (PROCESS_NAME.equalsIgnoreCase(process)) { return true; } else { return false; } } catch (Exception e) { e.printStackTrace(); return true; } } /** * 根据Pid得到进程名 */ public static String getAppNameByPID(Context context, int pid) { ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); for (android.app.ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) { if (processInfo.pid == pid) { return processInfo.processName; } } return ""; } @Override public void onCreate() { super.onCreate(); myApplication = this; if (isAppMainProcess()) { //do something for init } }}这样就保证了可以只初始化一次。
1 0
- Android多进程时Application初始化问题,大坑
- Android多进程导致多次初始化Application
- Android 多进程会多次初始化 Application
- 小议Android多进程以致Application多次初始化
- Android避免多进程Application onCreate中初始化代码执行多次
- Android 的 Application 初始化
- Android M以上在Application中初始化配置的问题
- Android多进程时Application中onCreate执行多次
- Android 多进程对Application影响
- android使程序进程不被LMK杀死| application运行环境初始化
- Android防止调用远程服务时多次初始化Application
- android多进程问题
- 多进程导致 Application 多次执行的问题研究
- 关于Android 6.0的权限问题这个大坑记录
- 记录一个Android 6.0权限问题的大坑
- Android 极光推送多进程造成的application运行两次
- Android Browser学习一 application的初始化
- 判断同一application 不同的进程进行区别的初始化
- mysql的主从同步和分库分表
- ffmpeg视频格式转换for windows and linux
- MonkeyRunner
- 十二周OJ(用宏)输出已交换后的两个值
- OC中 向上取整
- Android多进程时Application初始化问题,大坑
- App Store 上架流程
- notepad++ 配置中出现的问题
- 数据库操作语句大全(sql)
- gRPC初探
- AngularJS(九)ng-click(事件),angular.module 函数,表单,输入验证
- 按键精灵 SayString输出文本乱码的解决方法
- 219. Contains Duplicate II
- C语言中struct与union的区别