Java 在活动onCreate之后调用(未调用)应用程序onCreate
在崩溃日志中,我发现android 7.0-8.0上出现了一些非常奇怪的应用程序错误,对于一些小用户来说,这种情况非常常见。我无法重现这个问题,这里是反映当前应用程序状态的代码 我有一个对我的应用程序类的静态引用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
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您不能在静态方法中返回此值。这里没有这个。静态方法在类的所有对象之间共享。