为什么Application创建了两次?

Sha*_*awn 6 android

我的应用程序在该Application::onCreate()方法中进行了相当多的初始化,并且我有一个检查,如果它被调用两次将抛出异常.

但是,在某些特定情况下,Application::onCreate()被调用两次.我在下面添加了以下Log语句onCreate():( instance是一个静态变量)

Log.i(TAG, "Application::ctor, this=" + this + " instance=" + instance + " pid="
            + android.os.Process.myPid());
Run Code Online (Sandbox Code Playgroud)

我有两个日志(通常,instance == null):

09-20 19:14:42.151 {main} [INFO] [Application] Application::ctor, this=com.shawnma.MyApplication@428886b0 instance=null pid=10741
09-20 19:14:50.116 {main} [INFO] [Application] Application::ctor, this=com.shawnma.MyApplication@42923e00 instance=com.shawnma.MyApplication@428886b0 pid=10741
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我从onCreate()方法返回- 它不会受到伤害,因为一切都应该在内存中.但是,另一个例外是在Android系统之后立即显示:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.innopath.mobilemd/com.innopath.mobilemd.ui.LauncherActivity}: java.lang.NullPointerException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
    at android.app.ActivityThread.access$600(ActivityThread.java:130)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4745)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)
   Caused by: java.lang.NullPointerException
            at android.view.ContextThemeWrapper.initializeTheme(ContextThemeWrapper.java:100)
            at android.view.ContextThemeWrapper.setTheme(ContextThemeWrapper.java:51)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2019)
            ... 11 more
Run Code Online (Sandbox Code Playgroud)

似乎第二次Application创造是由ALARM_MANAGER醒来引发的.但是,应用程序的第一次创建应该已经完成​​并保存在内存位置?

Fra*_*eng -3

检查您的 AndroidManifest.xml 中是否指定了其他进程。如果您的应用程序包含两个使用同一应用程序的进程,则onCreate应用程序中的方法将被调用两次。