首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onRestoreInstanceState没有被调用

onRestoreInstanceState没有被调用
EN

Stack Overflow用户
提问于 2015-08-23 16:45:54
回答 2查看 3.7K关注 0票数 5

当应用程序进入textView时,我想保存onPause的值。所以我实现了onSaveInstanceState和onRestoreInstanceState。但是,如下所示,logcat输出中从未调用onRestoreInstanceState。

我知道onRestoreInstanceState和onSaveInstanceState都不是应用程序生命周期的一部分,那么为什么onSaveInstanceState会被调用,而onRestoreInstanceState却没有呢?如何打电话给onRestoreInstanceState?

代码语言:javascript
复制
@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    Log.w(TAG, LogAnd.i("onResume", ""));

    btAdapter = BluetoothAdapter.getDefaultAdapter();
    if (btAdapter == null) {
        tvStatus.setText("[" + SysUtils.getDeviceName() + "] no Bluetooth installed.");
    } else {
        tvStatus.setText("[" + SysUtils.getDeviceName() + "] Bluetooth installed.");
    }
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    // TODO Auto-generated method stub
    super.onSaveInstanceState(outState);
    Log.w(TAG, LogAnd.i("onSaveInstanceState", ""));

    outState.putString("statusText", tvStatus.getText().toString());
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onRestoreInstanceState(savedInstanceState);
    Log.w(TAG, LogAnd.i("onRestoreInstanceState", ""));

    String status = savedInstanceState.getString("statusText");
    tvStatus.setText(status);
}

logcat

代码语言:javascript
复制
08-23 18:36:31.544: W/MainActivity(32195): -> onResume:
08-23 18:36:31.904: W/MainActivity(32195): -> onPause:
08-23 18:36:32.694: W/MainActivity(32195): -> onSaveInstanceState:
08-23 18:36:34.014: W/MainActivity(32195): -> onResume:
08-23 18:36:42.904: W/MainActivity(32195): -> onPause:
08-23 18:36:43.784: W/MainActivity(32195): -> onSaveInstanceState:
08-23 18:36:43.784: W/MainActivity(32195): -> onStop:
08-23 18:36:50.084: W/MainActivity(32195): -> onStart:BT-Receiver Registered
08-23 18:36:50.084: W/MainActivity(32195): -> onResume:
EN

回答 2

Stack Overflow用户

发布于 2015-08-23 16:57:42

onRestoreInstanceState()只在onStart()之后被调用,所以在onResume()之后不调用它。检查这个完整的活动生命周期。

我希望这能帮到你!

票数 2
EN

Stack Overflow用户

发布于 2015-08-23 17:04:20

正如正式参考书所说的关于onSaveInstanceState

此方法在活动可能终止之前被调用。

如果有可能杀死一个,那么onSaveInstanceState就会被称为onSaveInstanceState,不管它是否已经被杀死。

onRestoreInstanceState被调用时,实际上已经杀死了Activity

因此,如果Activity实际上没有被杀死,则不会调用onRestoreInstanceState

因此,onSaveInstanceStateonRestoreInstanceState之间的不对称调用就会发生。如果您想确保被称为onRestoreInstanceState,您肯定应该杀死您的Activity

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32169035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档