有时,在崩溃报告中,我可以在我的Application
中遇到AppWidgetProvider
实例为空。
这让我很困惑,因为我永远无法重现同样的问题。
我的设置如下
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
... >
<application
android:name=".JStockApplication"
... >
public class JStockApplication extends android.support.multidex.MultiDexApplication {
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
public void onCreate(){
super.onCreate();
me = this;
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
jStockOptions = JStockOptions.newInstance(sharedPreferences);
}
public static JStockApplication instance() {
return me;
}
public JStockOptions getJStockOptions() {
return jStockOptions;
}
}
public class JStockAppWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// context is not null. But, I'm not sure what is context.
//
// From crash report, JStockApplication.instance() can be null rarely.
// JStockApplication.instance().getJStockOptions() will cause NPE.
}
}
非常罕见,JStockApplication.instance().getJStockOptions()
会导致NPE!
我意识到大多数人(https://stackoverflow.com/a/5114361/72437)执行
me = this;
onCreate
中的
我不确定,执行此类初始化(以及PreferenceManager.getDefaultSharedPreferences(this)
)是否有助于解决此类神秘崩溃。
你有什么想法,NPE为什么会发生?
答案 0 :(得分:0)
我知道这个问题有点老,但是最近我刚刚遇到了类似的问题,这是由于从云中恢复应用程序数据引起的
清单的应用程序标记中是否有android:allowBackup =“ true”?如果是,则可能涉及此备份/还原过程。
从云中还原数据时,将以特定方式关闭该应用程序,然后再次启动该应用程序时,不会调用Application.onCreate方法。
为了重现这一点,请执行以下几个步骤:
adb shell bmgr backupnow my.package.name
shell bmgr
restore my.package.name
;该应用将被停止要再次重现此崩溃,只需重复步骤4和5。