一、生命周期经典图
二、测试代码如下:
1、LifeCycleMainActivity.java
package com.example.test;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
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 LifeCycleMainActivity extends Activity {
private static String TAG = "LifeCycleMainActivity";
private Button start_lifeCycleSubActivity = null;
private Button start_dialog = null;
private AlertDialog alertDialog = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "LifeCycleMainActivity->onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.lifecycle_main);
start_lifeCycleSubActivity = (Button) findViewById(R.id.start_lifeCycleSubActivity);
start_dialog = (Button) findViewById(R.id.start_dialog);
start_lifeCycleSubActivity.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(LifeCycleMainActivity.this,
LifeCycleSubActivity.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//标准模式
// intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//如果存在栈顶才重复使用;否则创建新的
// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//A->B->C->D;D跳转B,则新建B,且剩下A->B
//intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
// | Intent.FLAG_ACTIVITY_CLEAR_TOP);//A->B->C->D;D跳转B,如果是SINGLE_TOP,则重复利用,否则新建B,且剩下A->B
//intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);//A->B->C->D;D跳转B,如果B存在,则重复利用,则为A-C->D->B
startActivity(intent);
}
});
start_dialog.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
showCloseDiolg();
}
});
}
private void showCloseDiolg() {
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle("提示");
dialog.setMessage("确定退出应用?");
dialog.setPositiveButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
alertDialog.dismiss();
}
});
dialog.setNegativeButton("确定 ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
alertDialog.dismiss();
}
});
alertDialog = dialog.create();
alertDialog.show();
}
@Override
protected void onStart() {
Log.d(TAG, "LifeCycleMainActivity->onStart()");
super.onStart();
}
@Override
protected void onRestart() {
Log.d(TAG, "LifeCycleMainActivity->onRestart()");
super.onRestart();
}
@Override
protected void onResume() {
Log.d(TAG, "LifeCycleMainActivity->onResume()");
super.onResume();
}
@Override
protected void onPause() {
Log.d(TAG, "LifeCycleMainActivity->onPause()");
super.onPause();
}
@Override
protected void onStop() {
Log.d(TAG, "LifeCycleMainActivity->onStop()");
super.onStop();
}
@Override
protected void onDestroy() {
Log.d(TAG, "LifeCycleMainActivity->onDestroy()");
if (alertDialog != null) {
alertDialog.dismiss();
}
super.onDestroy();
}
}
2、LifeCycleSubActivity.java
package com.example.test;
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 LifeCycleSubActivity extends Activity {
private static String TAG = "LifeCycleSubActivity";
private Button start_lifeCycleMainActivity = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "LifeCycleSubActivity->onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.lifecyclesub_main);
start_lifeCycleMainActivity = (Button) findViewById(R.id.start_lifeCycleMainActivity);
start_lifeCycleMainActivity.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
startActivity(new Intent(LifeCycleSubActivity.this,
LifeCycleMainActivity.class));
}
});
}
@Override
protected void onStart() {
Log.d(TAG, "LifeCycleSubActivity->onStart()");
super.onStart();
}
@Override
protected void onRestart() {
Log.d(TAG, "LifeCycleSubActivity->onRestart()");
super.onRestart();
}
@Override
protected void onResume() {
Log.d(TAG, "LifeCycleSubActivity->onResume()");
super.onResume();
}
@Override
protected void onPause() {
Log.d(TAG, "LifeCycleSubActivity->onPause()");
super.onPause();
}
@Override
protected void onStop() {
Log.d(TAG, "LifeCycleSubActivity->onStop()");
super.onStop();
}
@Override
protected void onDestroy() {
Log.d(TAG, "LifeCycleSubActivity->onDestroy()");
super.onDestroy();
}
}
3、结果如下
1、新建LifeCycleMainActivity
LifeCycleMainActivity->onCreate()
LifeCycleMainActivity->onStart()
LifeCycleMainActivity->onResume()
2、按菜单键
LifeCycleMainActivity->onPause()
LifeCycleMainActivity->onStop()
3、从菜单键返回LifeCycleMainActivity
LifeCycleMainActivity->onRestart()
LifeCycleMainActivity->onStart()
LifeCycleMainActivity->onResume()
4、按home键
LifeCycleMainActivity->onPause()
LifeCycleMainActivity->onStop()
5、从home键返回LifeCycleMainActivity
LifeCycleMainActivity->onRestart()
LifeCycleMainActivity->onStart()
LifeCycleMainActivity->onResume()
6、锁屏
LifeCycleMainActivity->onPause()
LifeCycleMainActivity->onStop()
7、从锁屏返回返回LifeCycleMainActivity
LifeCycleMainActivity->onRestart()
LifeCycleMainActivity->onStart()
LifeCycleMainActivity->onResume()
8、直接按返回键关闭LifeCycleMainActivity
LifeCycleMainActivity->onPause()
LifeCycleMainActivity->onStop()
LifeCycleMainActivity->onDestroy()
9、启动dialog
无
10、LifeCycleMainActivity标准模式启动LifeCycleSubActivity
LifeCycleMainActivity->onPause()
LifeCycleSubActivity->onCreate()
LifeCycleSubActivity->onStart()
LifeCycleSubActivity->onResume()
LifeCycleMainActivity->onStop()
11、按返回键从返回LifeCycleSubActivity到LifeCycleMainActivity
LifeCycleSubActivity->onPause()
LifeCycleMainActivity->onCreate()
LifeCycleMainActivity->onStart()
LifeCycleMainActivity->onResume()
LifeCycleSubActivity->onStop()
LifeCycleSubActivity->onDestroy()
12、从LifeCycleSubActivity启动LifeCycleMainActivity
LifeCycleSubActivity->onPause()
LifeCycleMainActivity->onCreate()
LifeCycleMainActivity->onStart()
LifeCycleMainActivity->onResume()
LifeCycleSubActivity->onStop()
13、在这里Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP
和Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
LifeCycleMainActivity(新的)->LifeCycleSubActivity(新的)->LifeCycleMainActivity(新的)->LifeCycleSubActivity(旧的)
第二次跳转LifeCycleSubActivity,不需要onCreate()新的,而是onRestart()
14、LifeCycleSubActivity在主配置文件中设置android:theme="@android:style/Theme.Dialog" (相当于覆盖),没有调用onStop()
LifeCycleMainActivity->onPause()
LifeCycleSubActivity->onCreate()
LifeCycleSubActivity->onStart()
LifeCycleSubActivity->onResume()
四、几种启动方式
android:launchMode=”standard”(相当于Intent.FLAG_ACTIVITY_NEW_TASK) 每次启动activity都会创建个新的实例;
android:launchMode=”singleTop”(相当于Intent.FLAG_ACTIVITY_SINGLE_TOP) 每次启动activity,如果实例已经存在于栈顶,则重复利用;否则创建个新的实例;
android:launchMode=”singleTask”(相当于Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP) A->B->C->D,如果D想跳转到B,则B重新创建(如果在加个singleTop,则B重复利用),而且C、D要出栈;
Intent. FLAG_ACTIVITY_REORDER_TO_FRONT表示A->B->C->D D跳到B,B存在则重复利用,则直接变成A->C->D->B