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
- Activity生命周期与启动方式
- Activity生命周期、启动方式及常见Activity
- Activity生命周期启动方式及启动模式
- Activity生命周期与启动模式
- Activity 生命周期与启动模式
- Activity生命周期与启动模式
- Android:Activity的生命周期和启动方式
- 1.Activity的生命周期与启动模式
- Android Activity生命周期与启动模式
- Activity 生命周期与启动模式 详解
- Android Activity生命周期与启动模式
- Activity的生命周期与启动模式
- Activity的生命周期与启动模式
- 关于Activity的生命周期与启动模式
- Activity生命周期与启动模式基础知识备忘录
- Android-Activity的生命周期与启动模式
- Activity的生命周期与启动模式
- Activity生命周期与启动模式笔记
- Java线程——Thread与Runnable、start()与run()
- 让你的电脑变成windows+安卓双系统
- Building workspace has encountered a problem
- 虚函数的工作原理
- 476、【练习题】Number Complement
- Activity生命周期与启动方式
- Java实现二分查找算法(元素可重复)
- Quick-Cocos2d-x 3.3下集成云风pbc(Windows版)转
- BOM和DOM的区别和关联
- offsetWidth和width的区别
- Android之FTP文件上传
- C++中重载、重写(覆盖)和隐藏的区别
- Spring配置遇到的问题
- JavaWeb-JSP:JSP九大内置对象