Activity生命周期与启动方式

一、生命周期经典图


二、测试代码如下:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值