无法得到通过onSaveInstanceState()保存的Bundle数据

mmjiushimm 发布于 2014/10/01 16:43
阅读 1K+
收藏 0

在一个EditText输入框中输入字符,activity被destroy之前通过onSaveInstanceState()保存输入字符,当重新create这个activity时,onCreate(Bundle)的Bundle参数却是null,不清楚问题出在哪?activity的代码如下:

package com.example.TestSaveInstanceState;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.util.Log;
import android.widget.EditText;

public class MyActivity extends Activity {

    static final String STATE_KEY = "etInputState";
    EditText etInput;
    static final String MYTAG = "mytag";

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        etInput = (EditText)findViewById(R.id.etInput);
        if(savedInstanceState != null) {
            Log.w(MYTAG, savedInstanceState.getString(STATE_KEY));
            etInput.setText(savedInstanceState.getString(STATE_KEY));
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        String _s = etInput.getText().toString();
        if(_s != null) {
            outState.putString(STATE_KEY, _s);
            Log.w(MYTAG, "instance state = " + _s);
        }
    }
}

加载中
0
吴笑笑
onSaveInstanceState()方法会在什么时候被执行,有这么几种情况:

  (1)、当用户按下HOME键时。  这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,因此系统会调用onSaveInstanceState(),让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则

(2)、长按HOME键,选择运行其他的程序时。

  (3)、按下电源按键(关闭屏幕显示)时。

  (4)、从activity A中启动一个新的activity时。

  (5)、屏幕方向切换时,例如从竖屏切换到横屏时。

mmjiushimm
mmjiushimm
回复 @吴笑笑 : 好的,非常感谢!
吴笑笑
回复 @mmjiushimm : 网上关于这部分说的也是含糊,反正人为的操作下获取不到对象
吴笑笑
回复 @mmjiushimm : onSaveInstanceState一直是能够调用,但是貌似该方法没有把参数持久化保存在磁盘中,导致直接杀死应用再重启应用,无法获取到对象
吴笑笑
回复 @mmjiushimm : 帮你测试过了,onCreate是能获取到savedInstanceState的,并且不为null,但是前提是非人为操作下的重创调用(比如屏幕旋转重绘),在外部杀死活动再重创建该参数仍为null
mmjiushimm
mmjiushimm
回复 @吴笑笑 : 在onSaveInstanceState()在设置了log,可以确定被调用了。
下一页
返回顶部
顶部