在Activity中生命周期的方法有如下6个:
protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
如果需要管理Ativitry就需要对这个6个方法就行重写:
其实在一个Activity整个生命周期中上述七大生命周期函数并不是一定都会被执行的,有时由于系统内存不足的缘故,部分生命周期函数将会被跳过不执行。
一般地onCreate(),onRestart(),onStart(),onReusme()这四个函数是不能被系统跳过不执行的,而onDestory()函数在系统内存不足时,该函数将直接被系统跳过不执行。
onPause()函数比较特殊,即使在系统内存不足时,也一定会执行完该函数后其Activity才会被强制结束,原因是下一个Activity在等到该函数结束前前是不会继续进行。所以该函数常常用于对数据的持久化操作,同时也禁止进行任何耗时的操作。
onStop()函数则最为特殊,当Android的运行环境为HONEYCOMB即3.0之前的版本时,onStop()函数是可以被系统跳过不执行的。但是在HONEYCOMB即3.0之后的版本,onStop()函数和onPause()函数一样不能被跳过不执行。
使用Activity.startActivityForResult()的方式做链式启动,最后一个Activity.finish()前setResult(),通知上一页结束,依次通知,就能达到清栈的意图。
以下是核心的操作代码(忽略细节),首先主入口调出流程的首页`ActivityA`:
```java
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
findViewById(R.id.btnPerform).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, ActivityA.class));
}
});
}
}
```
```java
public class ActivityA extends Activity {
public static final int REQUEST_CODE = 111;
@Override
public void onCreate(Bundle savedInstanceState) {
findViewById(R.id.btnPerform).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(ActivityA.this, ActivityB.class), REQUEST_CODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ActivityA.REQUEST_CODE && resultCode == ActivityD.RESULT_CODE) {
setResult(ActivityD.RESULT_CODE);
finish();
}
}
}
```
```java
public class ActivityB extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
findViewById(R.id.btnPerform).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(ActivityB.this, ActivityC.class), ActivityA.REQUEST_CODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ActivityA.REQUEST_CODE && resultCode == ActivityD.RESULT_CODE) {
setResult(ActivityD.RESULT_CODE);
finish();
}
}
}
```
```java
public class ActivityC extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
findViewById(R.id.btnPerform).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(ActivityC.this, ActivityD.class), ActivityA.REQUEST_CODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ActivityA.REQUEST_CODE && resultCode == ActivityD.RESULT_CODE) {
setResult(ActivityD.RESULT_CODE);
finish();
}
}
}
```
```java
public class ActivityD extends Activity {
public static final int RESULT_CODE = 222;
@Override
public void onCreate(Bundle savedInstanceState) {
findViewById(R.id.btnPerform).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 关键代码,向上通知执行结果
setResult(RESULT_CODE);
finish();
}
});
}
}
```