按下 Home 后应用程序崩溃。无法暂停 - 派生类未调用 super.onSaveInstanceState()
当我按下主页按钮时,应用程序应该暂停,保存所有状态并正常工作。 相反,我收到此错误:
java.lang.RuntimeException:无法 暂停活动 {be.test.tester/be.test.tester.DataScreen}: java.lang.IllegalStateException: 派生类没有调用 super.onSaveInstanceState() 位于 android.app.ActivityThread.performPauseActivity(ActivityThread.java:3641) 在 android.app.ActivityThread.performPauseActivity(ActivityThread.java:3598) 在 android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3574) 在 android.app.ActivityThread.access$2500(ActivityThread.java:136) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2186) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:143) 在 android.app.ActivityThread.main(ActivityThread.java:5068) 在 java.lang.reflect.Method.invokeNative(本机 方法)在 java.lang.reflect.Method.invoke(Method.java:521) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 在 dalvik.system.NativeStart.main(本机 方法)
原因: java.lang.IllegalStateException: 派生类没有调用 super.onSaveInstanceState() 位于 android.view.View.dispatchSaveInstanceState(View.java:6087) 在 android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:1207) 在 android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:1207) 在 android.view.View.saveHierarchyState(View.java:6068) 在 com.android.internal.policy.impl.PhoneWindow.saveHierarchyState(PhoneWindow.java:1475) 在 android.app.Activity.onSaveInstanceState(Activity.java:1106) 在 android.app.Activity.performSaveInstanceState(Activity.java:1056) 在 android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1289) 在 android.app.ActivityThread.performPauseActivity(ActivityThread.java:3623) ... 12 更多
我的活动对触摸做出反应:
public class DataScreen extends Activity implements OnGestureListener{
我从意图中获得了一些额外的内容:
totUsage = Integer.parseInt(getIntent().getStringExtra("extraTotUsage"));
limit = Integer.parseInt(getIntent().getStringExtra("extraLimit"));
Bundle bundle = getIntent().getExtras();
mylist = (ArrayList<HashMap<String, String>>) bundle.get("extraMyList");
自定义视图正在显示数据(画布)。当您在屏幕上滚动时,自定义视图(设置、获取方法)中的数据会发生变化并自行重绘。
我在这里并没有真正管理 onSaveInstanceState,我真的不知道是否必须这样做。
我的应用程序位于堆栈顶部,因为:
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
我不明白该错误。
When I press the Home button, the app should be paused, save all state and work fine.
Instead I get this error:
java.lang.RuntimeException: Unable to
pause activity
{be.test.tester/be.test.tester.DataScreen}:
java.lang.IllegalStateException:
Derived class did not call
super.onSaveInstanceState() at
android.app.ActivityThread.performPauseActivity(ActivityThread.java:3641)
at
android.app.ActivityThread.performPauseActivity(ActivityThread.java:3598)
at
android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3574)
at
android.app.ActivityThread.access$2500(ActivityThread.java:136)
at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2186)
at
android.os.Handler.dispatchMessage(Handler.java:99)
at
android.os.Looper.loop(Looper.java:143)
at
android.app.ActivityThread.main(ActivityThread.java:5068)
at
java.lang.reflect.Method.invokeNative(Native
Method) at
java.lang.reflect.Method.invoke(Method.java:521)
at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at
dalvik.system.NativeStart.main(Native
Method)Caused by:
java.lang.IllegalStateException:
Derived class did not call
super.onSaveInstanceState() at
android.view.View.dispatchSaveInstanceState(View.java:6087)
at
android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:1207)
at
android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:1207)
at
android.view.View.saveHierarchyState(View.java:6068)
at
com.android.internal.policy.impl.PhoneWindow.saveHierarchyState(PhoneWindow.java:1475)
at
android.app.Activity.onSaveInstanceState(Activity.java:1106)
at
android.app.Activity.performSaveInstanceState(Activity.java:1056)
at
android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1289)
at
android.app.ActivityThread.performPauseActivity(ActivityThread.java:3623)
... 12 more
My activity reacts on touch:
public class DataScreen extends Activity implements OnGestureListener{
I'm getting some extra's from the intent:
totUsage = Integer.parseInt(getIntent().getStringExtra("extraTotUsage"));
limit = Integer.parseInt(getIntent().getStringExtra("extraLimit"));
Bundle bundle = getIntent().getExtras();
mylist = (ArrayList<HashMap<String, String>>) bundle.get("extraMyList");
A custom view is showing data (canvas). When you scroll on screen, data changes in custom view (set, get method) and redraws itself.
I don't really manage the onSaveInstanceState here, don't really know if I have to.
My app is onTop of the stack, because of:
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
I don't understand the error.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您应该重写 onSaveInstanceState 并调用其超级方法,如下所示。至少它帮助我解决了同样的问题。
You should override onSaveInstanceState and call its super method like shown below. At least it helped me with the same problem.
我刚刚正在处理这个问题。在我的应用程序中,主活动允许调用第二个活动来显示信息/说明等,它还有一个绘制应用程序的运行时元素的表面视图。
主要活动有一个变量来保存表面视图,如果在调用信息/指令活动之前尚未设置该变量,我会收到此错误。我只是将表面视图变量分配移至主活动 onCreate 中,一切都很好。
I've just been dealing with this problem. In my app the main activity allows a second activity to be called to display info/instructions etc, it also has a surface view that draws the runtime element of the app.
The main activity has a variable to hold the surface view, if that variable hasn't been set before the info/instructions activity is called I get this error. I simply moved the surface view variable assignment into the main activity onCreate and all is well.
也有可能使用不调用“super.onSavedInstanceState()”的自定义首选项(例如自定义对话框首选项),这会导致相同的错误。
It is also possible that one uses a custom preference (e.g. custom dialog preference) that does not call "super.onSavedInstanceState()" which leads to the same error.