好的,伙计们,我真的需要一些帮助,我有一个已发布的应用程序 Auto Inspection,并且在我的 Droid 4 上,在现实世界中使用时,按下手机上的物理主页按钮会暂停应用程序一段时间,在调用 onRestoreInstanceState 后它会崩溃。我能弄清楚的最多的是我要返回的片段有一个按钮“添加新车”,一旦单击该按钮,它就会在单击时更新下一个片段,它会崩溃。我认为是因为第三个片段的片段状态丢失了。该应用程序始终可以完美运行,直到它暂停一段时间。这是我的堆栈跟踪:
java.lang.NullPointerException
at pete01507.AutoInspection.af.a(Unknown Source)
at pete01507.AutoInspection.MainActivity.a(Unknown Source)
at pete01507.AutoInspection.ae.onClick(Unknown Source)
at android.view.View.performClick(View.java:4106)
at android.view.View$PerformClick.run(View.java:17052)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5059)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
任何帮助,将不胜感激。谢谢
这是 onRestoreInstanceState:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.d(TAG, "onRestoreInstanceState");
if (savedInstanceState == null) {
Log.d(TAG, "Restore onSaveInstanceState was empty");
car="";
fresh=false;
}else{
Log.d(TAG, "Restore onSaveInstanceState else was not empty");
car = (String) savedInstanceState.get("car");
load();
mViewPager.setCurrentItem(savedInstanceState.getInt("vp"));
}
}
这是 onSaveInstanceState:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
Log.d(TAG, "onSaveInstanceState");
if (car.equals("")){
Log.d(TAG, "onSaveInstanceState car not loaded");
} else {
Log.d(TAG, "onSaveInstanceState car is loaded");
savedInstanceState.putString("car", car);
savedInstanceState.putInt("vp", mViewPager.getCurrentItem());
}
}
更新:我在 ViewPager 上有一个带有七个静态片段的 MainActivity,该活动没有任何视图或页面,因此当应用程序启动时,第一页是第一个片段。当单击“+ New Vehicle”按钮时,我删除了对回调接口的所有调用以更新第三个片段,此按钮位于第二个片段中。现在该应用程序可以正常运行而不会崩溃,但片段 #3 没有更新。回调接口仍然会更新第一个片段,但不会更新第三个片段,我还没有弄清楚是在应用程序被内存不足的 Android 杀死之后,您再次单击应用程序以使用第三个片段并休息的片段不再可以通过接口访问。