在谈Activity生命周期之前先谈下Activity栈:
Activity栈保存了已经启动并且还没有终止的所有的Activity,并且我们知道栈是遵从“后进先出”的规则,那么Activity栈同样也遵从这样的规则。
Activity的状态与其在Activity栈的位置有着密切的关系。不仅如此,Android系统在资源不足时,也是通过Activity栈来选择哪些Activity是可以被终止的,一般来讲,Activity系统会优先选择终止处于目前是停止状态并且比较靠近Activity栈底的Activity。
结合一个例子来了解下Activity栈吧
Activty的生命周期:
Activity生命周期是指Activity从启动到销毁的过程。
首先来看下Activity的生命周期图:
Activity有四种状态:活动状态 暂停状态 停止状态 非活动状态
先看下Actvity的七个生命周期函数以及说下这几个函数都是在什么时候调用的:
函数 |
是否可终止 |
说明 |
onCreate |
否 |
当Activity第一次启动时将调用这个函数,在这个函数里我们要做的是要进行Activity的初始化,例如创建指定Activity的布局文件、数据的绑定等 |
onStart |
否 |
当Activity显示在屏幕上的时候将调用这个函数 |
onRestart |
否 |
当Activity从停止状态进入活动状态前,将调用这个函数 |
onResume |
否 |
当Activity获得焦点,也就是说Activity能够与用户交互的时候将调用这个函数,这个时刻Activity位于Activity栈的顶端 |
onPause |
是 |
当Activity进入暂停状态将调用这个函数,但在这个时刻我们一般用来保存持久的数据或者释放占用的资源。 |
onStop |
是 |
当Activity完全被遮时将调用这个函数,记住是全部被遮 |
onDestory |
是 |
当Activity在被终止前,即将进入非活动状态前,将调用该函数,一般以下两种情况下会调用onDestory函数1、调用Activity的finish方法2、当Android系统资源不足的时候 |
知道了这些函数和结合上面的图我们来看一个例子来更好的理解下Android的生命周期
package com.szy.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private final static String TAG="MainActivity"; private Button secondBtn=null; private Button thirdBtn=null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); secondBtn=(Button)findViewById(R.id.secondBtn); thirdBtn=(Button)findViewById(R.id.thirdBtn); secondBtn.setOnClickListener(listener); thirdBtn.setOnClickListener(listener); Log.i(TAG, "MainActivity-->onCreate"); } @Override protected void onDestroy() { super.onDestroy(); Log.i(TAG, "MainActivity-->onDestroy"); } @Override protected void onPause() { super.onPause(); Log.i(TAG, "MainActivity-->onPause"); try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected void onRestart() { super.onRestart(); Log.i(TAG, "MainActivity-->onRestart"); } @Override protected void onResume() { super.onResume(); Log.i(TAG, "MainActivity-->onResume"); } @Override protected void onStart() { super.onStart(); Log.i(TAG, "MainActivity-->onStart"); } @Override protected void onStop() { super.onStop(); Log.i(TAG, "MainActivity-->onStop"); } private OnClickListener listener=new OnClickListener() { @Override public void onClick(View v) { Button btn=(Button)v; Intent intent=new Intent(); switch (btn.getId()) { case R.id.secondBtn: intent.setClass(MainActivity.this, SecondActivity.class); break; case R.id.thirdBtn: intent.setClass(MainActivity.this, ThirdActivity.class); break; } startActivity(intent); } }; }
package com.szy.activity; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class SecondActivity extends Activity { private static final String TAG = "MainActivity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); Log.i(TAG, "SecondActivity-->onCreate"); } @Override protected void onDestroy() { super.onDestroy(); Log.i(TAG, "SecondActivity-->onDestroy"); } @Override protected void onPause() { super.onPause(); Log.i(TAG, "SecondActivity-->onPause"); } @Override protected void onRestart() { super.onRestart(); Log.i(TAG, "SecondActivity-->onRestart"); } @Override protected void onResume() { super.onResume(); Log.i(TAG, "SecondActivity-->onResume"); } @Override protected void onStart() { super.onStart(); Log.i(TAG, "SecondActivity-->onStart"); } @Override protected void onStop() { super.onStop(); Log.i(TAG, "SecondActivity-->onStop"); } }
package com.szy.activity; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class ThirdActivity extends Activity { private static final String TAG = "MainActivity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.third); Log.i(TAG, "ThirdActivity-->onCreate"); } @Override protected void onDestroy() { super.onDestroy(); Log.i(TAG, "ThirdActivity-->onDestroy"); } @Override protected void onPause() { super.onPause(); Log.i(TAG, "ThirdActivity-->onPause"); } @Override protected void onRestart() { super.onRestart(); Log.i(TAG, "ThirdActivity-->onRestart"); } @Override protected void onResume() { super.onResume(); Log.i(TAG, "ThirdActivity-->onResume"); } @Override protected void onStart() { super.onStart(); Log.i(TAG, "ThirdActivity-->onStart"); } @Override protected void onStop() { super.onStop(); Log.i(TAG, "ThirdActivity-->onStop"); } }
源代码下载:http://download.csdn.net/detail/jiahui524/3611839