Android多程序時Application初始化問題,大坑
阿新 • • 發佈:2019-01-07
之前在做專案時,遇到一個大坑,就是我的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 } } }
這樣就保證了可以只初始化一次。
===============================
如果你覺得幫到了你,請給作者打賞一口飯吃: