当用户在使用软件的时候,如果此时更高权限的应用突然发生响应(如:电话),此时用户的当前在用户的应用程序就会被放到后台。当用户在结束完更高权限的应用时,在回到此应用时:
1.如果此应用被系统回收了,则系统会重新加载这个应用程序,导致数据的丢失。
此时可以使用如下的代码保存用户的activity的状态:
/**
* 此方法用于在系统想要释放当前的Activity时,保存Activity的状态
*/
@Override
protected void onSaveInstanceState(Bundle
outState) {
System. out.println( "------------------onSaveInstanceState" );
/**
* 使用Bundle 保存当前的数据
*/
if (outState != null)
{
outState.putString( this. TAG, edit.getText().toString());
}
super.onSaveInstanceState(outState);
}
此时数据已经保存在Bundle 对象中了。
在系统加载时调用:
@Override
public void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_main);
edit = (EditText) findViewById(R.id. edit);
if (savedInstanceState != null)
{
edit.setText(savedInstanceState.getString( this. TAG));
}
if (savedInstanceState != null)
{
System. out.println( "-----------------------onCreate()" );
}
}
这样在应用程序被重新加载时,也会回到上次的数据状态。
2.当用户进行横屏、竖屏、Back、Home 操作时,也会使当前的Activity的Pause,然后resume。
此时数据也会照成丢失。可以调用如下的方法进行:
/**
* 保存当前的数据,用于用户点击back 或者是home 键时
*/
@Override
protected void onPause()
{
System. out.println( "--------------------------onPause" );
super.onPause();
this.getPreferences( MODE_PRIVATE).edit()
.putString( this. TAG,edit.getText().toString()).commit();
}
/**
* 恢复数据,用于用户点击了back 或者是 home按键时
*/
@Override
protected void onResume()
{
System. out.println( "--------------------------onResume" );
super.onResume();
edit.setText( this.getPreferences( MODE_PRIVATE).getString( this. TAG, ""));
}