Android 应用程序 onCreate 未在 Activity onCreate 之前调用

Ole*_*lov 5 java crash android oncreate

在 Google Play 上,我NullPointerException在尝试访问静态Application实例时收到一条消息。它出现在不同的 Android 操作系统版本上:Android 9、8 和 6。

从代码来看,似乎Application.onCreate()尚未被调用或在之后调用Activity.onCreate()

我看到了类似的问题,但没有任何有用的回应:

应用程序 onCreate 在 Activity onCreate 之后调用(未调用)

Android Activity::onCreate 在 Application.onCreate 之前调用

作为一个侧面解决方案,我将创建一个单独的单例类,Context并根据Context. 但是,我不确定它如何与 Dagger 一起使用。

我的问题是:

  1. 这是安卓的bug吗?
  2. 难道我做错了什么?
  3. 其他开发者是如何解决的?
public class App extends androidx.multidex.MultiDexApplication implements Application.ActivityLifecycleCallbacks, ComponentCallbacks2 {
    private static App instance;

    public static App getInstance() {
        return instance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;

        // init singletone
    }

    private Singletone singletone;

    public Singletone getSingletone() {}
}

public class MainActivity extends androidx.appcompat.app.AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // On Google Play it produces NullPointerException

        Singletone singletone = App.getInstance().getSingletone();
    }
}
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.package.name">
    <application
        android:name=".app.App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme.NoActionBar"
        android:largeHeap="true"
        >

        <activity
            android:name=".activities.MainActivity"
            android:screenOrientation="portrait"
            android:launchMode="singleTask"
            android:windowSoftInputMode="adjustPan"
            android:theme="@style/AppTheme.NoActionBar.Launcher"
            >
        </activity>
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

The*_*Jan 0

您必须instance = this;从 onCreate() 转移到 App 的构造函数。