Activity生命周期与启动方式

来源:互联网 发布:做淘宝客服售前的技巧 编辑:程序博客网 时间:2024/06/14 18:37

一、生命周期经典图


二、测试代码如下:

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;@Overrideprotected 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() {@Overridepublic 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->BstartActivity(intent);}});start_dialog.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {showCloseDiolg();}});}private void showCloseDiolg() {AlertDialog.Builder dialog = new AlertDialog.Builder(this);dialog.setTitle("提示");dialog.setMessage("确定退出应用?");dialog.setPositiveButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {alertDialog.dismiss();}});dialog.setNegativeButton("确定 ", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {alertDialog.dismiss();}});alertDialog = dialog.create();alertDialog.show();}@Overrideprotected void onStart() {Log.d(TAG, "LifeCycleMainActivity->onStart()");super.onStart();}@Overrideprotected void onRestart() {Log.d(TAG, "LifeCycleMainActivity->onRestart()");super.onRestart();}@Overrideprotected void onResume() {Log.d(TAG, "LifeCycleMainActivity->onResume()");super.onResume();}@Overrideprotected void onPause() {Log.d(TAG, "LifeCycleMainActivity->onPause()");super.onPause();}@Overrideprotected void onStop() {Log.d(TAG, "LifeCycleMainActivity->onStop()");super.onStop();}@Overrideprotected 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;@Overrideprotected 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() {@Overridepublic void onClick(View arg0) {startActivity(new Intent(LifeCycleSubActivity.this,LifeCycleMainActivity.class));}});}@Overrideprotected void onStart() {Log.d(TAG, "LifeCycleSubActivity->onStart()");super.onStart();}@Overrideprotected void onRestart() {Log.d(TAG, "LifeCycleSubActivity->onRestart()");super.onRestart();}@Overrideprotected void onResume() {Log.d(TAG, "LifeCycleSubActivity->onResume()");super.onResume();}@Overrideprotected void onPause() {Log.d(TAG, "LifeCycleSubActivity->onPause()");super.onPause();}@Overrideprotected void onStop() {Log.d(TAG, "LifeCycleSubActivity->onStop()");super.onStop();}@Overrideprotected 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

0 0
原创粉丝点击