Java 在活动onCreate之后调用(未调用)应用程序onCreate

Java 在活动onCreate之后调用(未调用)应用程序onCreate,java,android,Java,Android,在崩溃日志中,我发现android 7.0-8.0上出现了一些非常奇怪的应用程序错误,对于一些小用户来说,这种情况非常常见。我无法重现这个问题,这里是反映当前应用程序状态的代码 我有一个对我的应用程序类的静态引用 public class MyApplication extends Application { private static MyApplication sInstance; public static MyApplication get() { retur

在崩溃日志中,我发现android 7.0-8.0上出现了一些非常奇怪的应用程序错误,对于一些小用户来说,这种情况非常常见。我无法重现这个问题,这里是反映当前应用程序状态的代码

我有一个对我的应用程序类的静态引用

public class MyApplication extends Application {
   private static MyApplication sInstance;

   public static MyApplication get() {
      return sInstance;
   }

   @Override
   public void onCreate() {
      super.onCreate();
      sInstance = this;
   }
}
在主活动中,我对单例进行初始化:

public class MainActivity extends AppCompatActivity{

    public void onCreate(final Bundle savedInstanceState) {
        initSingletone();
        super.onCreate(createBundleNoFragmentRestore(savedInstanceState))
    }

    public void initSingleTone(){
        Singleton singleton = Singleton.getInstance(); 
    }
}
public class Singleton{

    public static Singleton instance;
    public static Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return ;
    }

    public Singleton(){
        Context context = MyApplication.get();
        final File baseDir = context.getCacheDir();
        ....
    }
}
单身人士:

public class MainActivity extends AppCompatActivity{

    public void onCreate(final Bundle savedInstanceState) {
        initSingletone();
        super.onCreate(createBundleNoFragmentRestore(savedInstanceState))
    }

    public void initSingleTone(){
        Singleton singleton = Singleton.getInstance(); 
    }
}
public class Singleton{

    public static Singleton instance;
    public static Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return ;
    }

    public Singleton(){
        Context context = MyApplication.get();
        final File baseDir = context.getCacheDir();
        ....
    }
}
NullPointerException发生在下一行

final File baseDir = context.getCacheDir();
因为出于某些原因,MyApplication.get返回null。 似乎在onCreate of MainActivity的时候没有调用onCreate of应用程序,真的很奇怪。 有人遇到过同样的问题吗?
Android组件如此奇怪的初始化过程是什么原因

您可以使用安全的方法:

public static MyApplication get() {
if(sInstance == null){
 sInstance = this;
 }
    return sInstance;
}

sInstance在哪里声明?@VikashBijarniya更新了代码共享您的清单also@sohaibkarim请阅读描述,我无法重现我这边的问题,因此应用程序运行良好。这意味着在应用程序清单中定义了MyApplication。您是否在AndroidManifest文件中将应用程序名称添加为MyApplication?我不确定它是否安全,因为如果应用程序中的onCreate没有被调用,这可能意味着应用程序上下文还没有初始化,并且我在尝试访问任何资源时可能会收到错误。这通常是看不到的,但如果发生了,那么我们需要崩溃的日志。在应用程序类未初始化时,永远不可能访问资源。我认为您应该尝试禁用instant run,然后清理项目并重新构建。即时运行有多个奇怪的问题。如果在执行实例的super.attachBaseContext之前调用应用程序实例上的getResource,则应用程序将因NullPointerExeption而崩溃。@VikashBijarniya您不能在静态方法中返回此值。这里没有这个。静态方法在类的所有对象之间共享。