最近学习了Activity的生命周期,下面通过一个小例子来更好的理解一下Activity的生命周期。
阶段1::实现如下图所示的界面
此时按下Home键,再次启动ActivityDemo应用程序,观察一下EditText中还有没有刚才我们输入的data.然后再按下返回键重新启动ActivityDemo应用程序,观察EditText中还有没有data.
阶段2:重写生命周期的7个方法,添加日志输出语句或者是普通的输出语句,观察在按下Home键是首先调用的是哪个方法?再次启动ActivityDemo时又调用的是哪个方法?按下返回键首先调用的是哪个方法?再次动ActivityDemo时又调用的是哪个方法?
经过测试,可以得出结论:
首先,启动ActivityDemo应用程序会调用onCreate、onStart、onResume方法.
然后,在文本框中输入data后,如果按HOME键,会调用onPause、onStop方法。再次启动ActivityDemo应用程序,调用onRestart、onStart、onResume方法。这时,在文本框输入的data仍然保留。
再者,如果按返回键,程序调用onPause、onStop、onDestroy方法。再次启动ActivityDemo应用程序,调用onCreate、onStart、onResume方法。这时,文本框中的data消失。与之前不同的是此次程序运行了onDestroy方法,销毁内存中保留的数据。
现在问题又来了,想想如何实现按下返回键,然后再次启动ActivityDemo应用程序,EditText中仍然保留我们刚刚输入的内容呢?
下面代码重写生命周期的七个方法,实现EditText中名字的保留:
public class MainActivity extends Activity {
private EditText nameinput;
public static final String SETTING_INFOS="SETTING_Infos";
public static final String NAME="NAME";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("onCreate...");
nameinput=(EditText) findViewById(R.id.name);
SharedPreferences settings=getSharedPreferences(SETTING_INFOS, 0);
String name=settings.getString(NAME, "");
nameinput.setText(name);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected void onStart() {
super.onStart();
System.out.println("onStart...");
}
@Override
protected void onRestart() {
super.onRestart();
System.out.println("onRestart...");
}
@Override
protected void onResume() {
super.onResume();
System.out.println("onResume...");
}
@Override
protected void onPause() {
super.onPause();
System.out.println("onPause...");
}
@Override
protected void onStop() {
super.onStop();
System.out.println("onStop...");
SharedPreferences settings=getSharedPreferences(SETTING_INFOS, 0);
settings.edit().putString(NAME, nameinput.getText().toString()).commit();
}
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("onDestroy...");
}
}