Activity之生命周期
这几天没事,自学了一下Android的开发,今天记录一下activity的生命周期,在写之前,我们先看一下,Google官方的文档,窃以为这个说的已经比较清楚明白了:
从这张图,我们清楚无误的看到,activity的生命周期方法执行顺序为:onCreate()–>onStart()–>onResume()–>onPause()–>onStop()–>onRestart()–>ondestory()
但是口说无凭,我们从一个例子中说明问题:
第一个activity:
package cn.bridgeli.lifecycle; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private Button button = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button); ButtonListener buttonListener = new ButtonListener(); button.setOnClickListener(buttonListener); System.out.println("First activity onCreate"); } class ButtonListener implements OnClickListener{ @Override public void onClick(View arg0) { Intent intent = new Intent(); intent.setClass(MainActivity.this, SecondActivity.class); startActivity(intent); } } @Override protected void onDestroy() { super.onDestroy(); System.out.println("First activity onDestroy"); } @Override protected void onPause() { System.out.println("First activity onPause"); super.onPause(); } @Override protected void onResume() { super.onResume(); System.out.println("First activity onResume"); } @Override protected void onStart() { super.onStart(); System.out.println("First activity onStart"); } @Override protected void onStop() { super.onStop(); System.out.println("First activity onStop"); } @Override protected void onRestart() { super.onRestart(); System.out.println("First activity onRestart"); } }
第二个activity:
package cn.bridgeli.lifecycle; import android.app.Activity; import android.os.Bundle; public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); System.out.println("second activity created"); } @Override protected void onDestroy() { super.onDestroy(); System.out.println("second activity onDestroy"); } @Override protected void onPause() { super.onPause(); System.out.println("second activity onPause"); } @Override protected void onResume() { super.onResume(); System.out.println("second activity onResume"); } @Override protected void onStart() { super.onStart(); System.out.println("second activity onStart"); } @Override protected void onStop() { super.onStop(); System.out.println("second activity onStop"); } @Override protected void onRestart() { super.onRestart(); System.out.println("second activity onRestart"); } }
当我们在手机里面运行时,从打印输出的语句里面很清晰的看到,他们的执行顺序,但是他们分别是什么时机执行的,在这些方法里面个要做些什么事呢?
onCreate()方法是第一个要执行的方法,这个方法里面一般是用来设置布局文件,findViewByID(),并绑定事件;
onStart()方法在onCreate()方法执行结束之后执行;
onResume()方法是在activity完全显示出来,即可以或得焦点的时候执行;
到了这个时候,我们的activity可以说是终于露出了庐山真面目;
这个时候如果我们点击页面上的button,onPause()方法便开始执行了,这个方法一般用于保存当前activity现场(即数据),例如我们此时用一个电话打进来了,我们就需要保存数据,以供接完电话后恢复现场,然后进入接电话的activity,接下来要执行的逻辑就和第一个activity相同了,即先onCreate(),然后onStart(),最后onResume();
如果大家按照我写的代码而执行的话,大家会发现,第二个activity的onResume()执行完之后,会执行第一个activity的onStop()方法,这就是onStop()执行的时机:当第二个activity把第一个activity完全遮盖之后会执行此方法;
此时如果我们点back按钮,紧接着就会执行先执行第二个activity的onPause(),再然后就是第一个activity的onRestart()方法和onStart()以及onResume()方法。
到了此处,也许大家会发现onDesrory()方法并没有被执行啊,是的,相信大家一看这个方法的名字就知道了:onDestory()方法是在activity被销毁的时候执行,他执行的时机有两个:一是我们在activity中显式调用finish()方法,而是手机内存不足时,操作系统进行内存回收,那么此时该方法就会被调用了。
下面我们在深入看一下:onStop()方法,刚才我说了该方法调用的时机是第二个activity把第一个activity完全遮盖之后执行的,所以我们可以在Mainifest.xml中给第二个activity加一个标签:
android:theme="@android:style/Theme.Dialog"
我们就会发现此时第二个activity会以一个对话框的方式弹出来,并不会把第一个activity给完全覆盖掉,此时onStop()方法便不会执行,我想这也许也是在onPanse()保存现场的原因之一吧。
PS:第一次写Android的东西,既是初学还是自学,不免有错误的地方,还请大家能留言交流,谢谢
作 者: BridgeLi,https://www.bridgeli.cn
原文链接:http://www.bridgeli.cn/archives/132
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
近期评论