理解Activity生命周期

最近学习了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;
    }

	@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...");
	}
    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值