Application onCreate函數多次被調用

Android應用可以支持開啓多個進程。 通常的做法是這樣

<service android:name=".NetworkService"
    android:process=":network"
/>

通常我們在Application的onCreate方法中會做很多初始化操作,但是每個進程啓動都需要執行到這個onCreate方法,爲了避免不必要的初始化,建議按照進程(通過判斷當前進程名)對應初始化.

public class MyApplication extends Application {
    private static final String LOGTAG = "MyApplication";

    @Override
    public void onCreate() {
        String currentProcessName = getCurrentProcessName();
        Log.i(LOGTAG, "onCreate currentProcessName=" + currentProcessName);
        super.onCreate();
        if (getPackageName().equals(currentProcessName)) {
            //init for default process
        } else if (currentProcessName.endsWith(":network")) {
            //init for netowrk process
        }
    }

    private String getCurrentProcessName() {
        String currentProcessName = "";
        int pid = android.os.Process.myPid();
        ActivityManager manager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
            if (processInfo.pid == pid) {
                currentProcessName = processInfo.processName;
                break;
            }
        }
        return currentProcessName;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章