Android - 第二章 Activity 探究

Android - 第二章 Activity 探究

1. Activity 是什么

2. Activity 的基本用法

3. 使用intent在Activity中调度

4. Activity的生命周期

Activity的状态:
1.运行状态(running)
Activity位于返回栈的栈顶。
2.暂停状态(paused)
Activity不再处于栈顶,但仍然可见。
这是因为不是每个Activity都会占慢整个屏幕的,比如对话框的Activity只会占用屏幕中间部分区域,此时的Activity仍然是完全存活的。
3.停止状态(stoped)
Activity不再处于栈顶,且完全不可见。
系统会保存该Activity的状态和成员变量。
4.销毁状态(killed)
Activity从返回栈中移除。

活动的生存期
onCreate() Activity的创建时候调用,完成Activity的初始化:加载布局、绑定事件等;
onStart() Activity从不可见变为可见是调用;
onResume() Activity准备好和用户进行交互时候调用,此时Activity一定位于返回栈的栈顶,并且处于运行状态;
onPause() 系统准备去启动或恢复另一个活动的时候调用;
onStop() Activity完全不可见的时候调用,和onPause()方法的区别在于,如果启动的新活动是一个对话框式活动,那么onPause()会得到执行,而onStop()方法并不会执行;
onDestory() Activity被销毁之前调用,之后Activity状态变为销毁状态;
onRestart() Activity由stopped 变为running之前调用。

Activity三种生存期:

  • 完整生存期。Activity在onCreate()和onDestroy()之间经历;
  • 可见生存期 。Activity在onStart()和onStop()之间经历。Activity在此期间对于用户一直可见,即使不能与用户交互。
  • 前台生存期。Activity在onResume()和onPause()之间经历。在此期间Activity一直处于运行且可以与用户互动。

5. Activity的启动模式

5.1 standard

Activity默认的启动模式。
在standard模式下,每当启动一个新的Activity,它就会在返回栈中入栈,并处于栈顶的位置。对于使用standard模式的Activity,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。

Android - 第二章 Activity 探究_第1张图片

5.2 singleTop

在启动Activity时发现返回栈的栈顶已经是该Activity时,则认为可以直接使用它,不会再创建新的活动实例。
如果未在栈顶,还是会创建新的实例。

Android - 第二章 Activity 探究_第2张图片

5.3 singleTask

系统每次启动该Activity首先会在返回栈中检查是否存在该Activity的实例,如果存在则直接使用该实例,并把这个Activity上的所有Activity统统出栈,如果不存在,则创建一个新的Activity实例。.
Android - 第二章 Activity 探究_第3张图片

5.4 singleInstance

不同于以上三种启动模式,指定singleInstance模式的Activity会启动一个新的返回栈来管理Activity(其实如果singleTask模式指定了不同的taskAffinity,也会启动一个新的返回栈)。
场景应用:
假设我们的程序中有一个Activity是允许其他程序调用的,如果我们想实现其他程序和我们程序可以共享这个Activity的实例。使用前三种启动模式一定不行,因为每个应用程序都有自己的的返回栈,同一个Activity在不同的返回栈中入栈时肯定创建了新的实例。而使用了singleInstance模式,会有一个单独的返回栈来管理这个Activity,不管是哪个应用程序来访问这个Activity,都是共用同一个返回栈,解决了共享Activity实例的问题。

Android - 第二章 Activity 探究_第4张图片

6. 启动Activity的最佳写法

public class SecondActivity extends BaseActivity {
	public static void actionStart(Context context, String data1, String data2) {
		Intent intent = new Intent(context, SecondActivity.class);
		intent.putExtra("param1", data1);
		intent.putExtra("param2", data2);
		context.startActivity(intent);
	}
	...
}

我们在SecondActivity中添加了一个actionStart()方法,在这个方法中完成了Intent的构建,另外所有SecondActivity中需要的数据都是通过actionStart()方法的参数传递过来的,然后把它们存储到Intent中,最后调用startActivity()启动SecondActivity。

不用阅读SecondActivity中的代码,可以直接看到启动SecondActivity需要哪些数据。
简化启动Activity的代码。例如:

button1.setOnclickListener(new onClickListener() {
	@Override
	public void onClick(View v) {
		SecondActivity.actionStart(FirstActivity.this, "data1", "data2");
	}
});

你可能感兴趣的:(Android)