在谈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