onRestoreInstanceState()被覆盖时状态发生变化

时间:2010-12-29 19:16:22

标签: android

据我所知,onSaveInstanceState()onRestoreInstanceState()方法旨在存储活动状态即将onPause()之前的动态数据。我创建了一个简单的Activity,其中包含一个按钮,单击它后会更改其文本。我确实在他们的身体中没有任何内容覆盖这两种方法:

@Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
    }

我通过移动到主屏幕并返回应用程序来隐藏和恢复活动。当活动恢复时,按钮的文本不是默认值,正如我预期的那样,但它是在将活动传递给onPause()之前的状态。如果我的onRestoreInstanceState()方法为空,它是如何工作的。

更奇怪的是 - 我试图调试以查看何时调用这两个方法并注意到onRestoreInstanceState()甚至没有被调用。

1 个答案:

答案 0 :(得分:0)

  

用于在Activity的状态即将进入onPause()之前存储动态数据。

不完全。作为onSaveInstanceState()州的文档:

“如果被调用,此方法将在onStop()之前发生。无法保证它是在onPause()之前还是之后发生。”

  

我通过移动到主屏幕并返回应用程序来隐藏和恢复活动。

可能触发onSaveInstanceState()也可能不触发onRestoreInstanceState()。它不太可能触发onSaveInstanceState()。测试这些方法的更好方法是更改​​屏幕方向。

  

当活动恢复时,按钮的文本不是默认值,正如我预期的那样,但它与将活动传递给onPause()之前的情况一样。

用户无法输入按钮,因此{{1}}的默认实现会忽略它们。