Android防止調用遠程服務時多次初始化Application

不知道大家有沒有遇到過, 在集成多個第三方 SDK 時 ( 比如集成環信和百度地圖就會 ), 有時候 Application 的 onCreate ( ) 方法會執行多次, 這樣就回導致程序崩潰, 我是這麼處理的:

在 Application 的 onCreate ( ) 方法中調用 oneInit( ) 方法:

//項目的包名
public final static String PKG_NAME = "com.example.leon";

/**
 * 單次初始化
 */
public void oneInit() {
    int pid = android.os.Process.myPid();
    String processAppName = getAppName(pid);
    LogUtil.println("processAppName---" + processAppName);
    //默認的app會在以包名爲默認的process name下運行,如果查到的process name不是APP的process name就return掉
    if (processAppName == null ||!processAppName.equalsIgnoreCase(PKG_NAME)) {
        LogUtil.println("enter the service process!");
        // 則此application::onCreate 是被service 調用的,直接返回
        return;
    }
}

private String getAppName(int pID) {
    String processName = null;
    ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
    List l = am.getRunningAppProcesses();
    Iterator i = l.iterator();
    while (i.hasNext()) {
        ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());
        try {
            if (info.pid == pID) {
                processName = info.processName;
                return processName;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return processName;
}
發佈了33 篇原創文章 · 獲贊 16 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章