首页 > 代码库 > onSaveInstanceState()方法问题

onSaveInstanceState()方法问题

============问题描述============


public class MainActivity extends Activity {
public static final String EXTRA_MESSAGE = "com.example.demotwotwo";
public static final String editTextString = "MainActivity_editTextString";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState!=null)
((EditText)findViewById(R.id.editText)).setText(savedInstanceState.getString(editTextString));
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(editTextString, ((EditText)findViewById(R.id.editText)).getText().toString());
}
}
为什么在onSaveInstanceState()方法里面我保存了EditText里面输入的信息,但是在回到这个Activity里面时又没法还原刚才输入的信息了?

============解决方案1============


你重写onSaveInstanceState()方法时,将outState.putString(editTextString, ((EditText)findViewById(R.id.editText)).getText().toString());放到super.onSaveInstanceState(outState)前面。

============解决方案2============


错了错了,是你的类型错了吧,不是EditText吧,改成String试试。。。

============解决方案3============


savedInstanceState  数据的保存只适用于 activity恢复时候。
对于新建的activity,savedInstanceState  =null;

返回再进入该act就是新建。

你的需求可以用sharePreferences 解决。
onPause/onDestory时保存, onCreate时候读取。

============解决方案4============


不会释放掉的,除非你调用了finish.

============解决方案5============


引用 7 楼 pearlbear 的回复:
Quote: 引用 6 楼 pearlbear 的回复:

Quote: 引用 5 楼 davidleen29 的回复:

savedInstanceState  数据的保存只适用于 activity恢复时候。
对于新建的activity,savedInstanceState  =null;

返回再进入该act就是新建。

你的需求可以用sharePreferences 解决。
onPause/onDestory时保存, onCreate时候读取。

对,我觉得是在新建,因为我从第二个Activity返回的时候,第一个就调用了onDestroy()方法,然后才调用onCreate()新建第一个Activity,在进入第二个Activity的时候第一个Activity不是应该调用onStop()方法吗?为什么就直接Destroy了呢?难道是因为内存不够,虚拟机自动调用onDestroy()释放内存?

我懂了,像在按home键回桌面再回来就不会调用onDestroy()方法,我的代码就有效,但是如果进入到下一级Activity再回来的时候,第一个Activity就会onDestroy(),就没法保存了,不过你的sharePreferences有效,谢谢!
也谢谢楼上各位!
对啊,我自己也写了个例子,可以的保存的啊。。。你自己调用finish了吧

onSaveInstanceState()方法问题