按下Home后应用程序崩溃。无法暂停 - 派生类没有调用super.onSaveInstanceState()

时间:2011-04-20 09:32:41

标签: android super illegalstateexception android-homebutton

当我按下主页按钮时,应该暂停应用程序,保存所有状态并正常工作。 相反,我得到了这个错误:

  

java.lang.RuntimeException:无法执行   暂停活动   {be.test.tester / be.test.tester.DataScreen}:   java.lang.IllegalStateException:   派生班没有打电话   super.onSaveInstanceState()at   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(母语   方法)at   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()at   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);

我不明白错误。

3 个答案:

答案 0 :(得分:5)

你应该覆盖onSaveInstanceState并调用它的super方法,如下所示。至少它帮助我解决了同样的问题。

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    // your stuff or nothing
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    // your stuff or nothing
}

答案 1 :(得分:2)

我刚刚处理过这个问题。在我的应用程序中,主活动允许调用第二个活动来显示信息/指令等,它还有一个表面视图,用于绘制应用程序的运行时元素。

主活动有一个变量来保存表面视图,如果在调用info / instructions活动之前没有设置该变量,我会收到此错误。我只是将表面视图变量赋值移动到主要活动onCreate上,一切都很好。

答案 2 :(得分:0)

也可能使用不调用“super.onSavedInstanceState()”的自定义首选项(例如自定义对话框首选项),这会导致相同的错误。