在崩溃日志中,我发现了非常奇怪的应用程序错误,发生在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();
....
}
}
NullPointerException
出现在以下行中。
final File baseDir = context.getCacheDir();
因为MyApplication.get()
由于某些原因返回null。似乎Application
的onCreate
在MainActivity
的onCreate
的时刻没有被调用,真的很奇怪。有人遇到过同样的问题吗?Android组件初始化过程如此奇怪的原因是什么?
2条答案
按热度按时间s8vozzvw1#
将
sInstance = this;
移动到构造函数。onCreate()太晚。
在我看来,这是一个Android bug,如果应用程序的onCreate()还没有完成执行,没有明显的理由对Activity做任何事情。
ars1skjm2#
您可以使用安全的方法: