理解Activity生命周期

来源:互联网 发布:windows找不到mstsc 编辑:程序博客网 时间:2024/05/29 14:54

最近学习了Activity的生命周期,下面通过一个小例子来更好的理解一下Activity的生命周期。

阶段1:实现如下图所示的界面

                             

此时按下Home键,再次启动ActivityDemo应用程序,观察一下EditText中还有没有刚才我们输入的data.然后再按下返回键重新启动ActivityDemo应用程序,观察EditText中还有没有data.

阶段2:重写生命周期的7个方法,添加日志输出语句或者是普通的输出语句,观察在按下Home键是首先调用的是哪个方法?再次启动ActivityDemo时又调用的是哪个方法?按下返回键首先调用的是哪个方法?再次动ActivityDemo时又调用的是哪个方法?

经过测试,可以得出结论:

首先,启动ActivityDemo应用程序会调用onCreateonStartonResume方法.

然后,在文本框中输入data后,如果按HOME键,会调用onPauseonStop方法。再次启动ActivityDemo应用程序,调用onRestartonStartonResume方法。这时,在文本框输入的data仍然保留。

再者,如果按返回键,程序调用onPauseonStoponDestroy方法。再次启动ActivityDemo应用程序,调用onCreateonStartonResume方法。这时,文本框中的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;    }@Overrideprotected void onStart() {super.onStart();System.out.println("onStart...");}@Overrideprotected void onRestart() {super.onRestart();System.out.println("onRestart...");}    @Overrideprotected void onResume() {super.onResume();System.out.println("onResume...");}@Overrideprotected void onPause() {super.onPause();System.out.println("onPause...");}@Overrideprotected void onStop() {super.onStop();System.out.println("onStop...");SharedPreferences settings=getSharedPreferences(SETTING_INFOS, 0);settings.edit().putString(NAME, nameinput.getText().toString()).commit();}@Overrideprotected void onDestroy() {super.onDestroy();System.out.println("onDestroy...");}    }


原创粉丝点击