Android 的 Activity

关于 Activity 的几点用法

本文是《Android 开发艺术探索》第一章的读书笔记。

Activity 的 Lifecycle

首先是 Activity 的 lifecycle 几个注意的地方:

  • onRestart 会在 activity 从不可见到重新可见的过程中调用。
  • onStart 表示 activity 已经可见了,但是还没有在前台,不可和用户交互。
  • onPause 一般紧跟着 onStop ,只有极端情况下,用户又返回当前 activity 才会又调用 onResume 。一般进行一些不耗时的处理,比如停止动画等。
  • onStop 如果新启动的 activity 采用了透明的主题,则下面的 activity 的 onStop 不会被调用。因为仍然可见。
  • 第二个 activity 的 onCreate 是在第一个 activity 的 onPause 之后调用的。过程类似:
A.onPause
B.onCreate
B.onStart
B.onResume
A.onStop
#include <studio.h>
int main(char *argc, char *argv[]) {
    printf("hello world");
    return 0;
}
  • 系统只有在 Activity 异常终止的时候才会调用 onSaveInstanceStateonRestoreInstanceState 来存储和恢复数据。
  • 为了防止 Activity 在转屏时候重启,configChanges 除了指定 orientation 还需要指定 screenSize 。

Activity 状态变迁图

Activity 的 LaunchMode 和 Flags

Standard 模式

标准模式是每次 startActivity 都会产生一个新的 activity 的实例。

singleTop 模式 (FLAG_ACTIVITY_SINGLE_TOP)

如果新的 Activity 已经位于任务栈的栈顶,则不会重新创建,同时 onNewIntent 会调用。否则创建新的 instance 。

singleTask 模式 (FLAG_ACTIVITY_NEW_TASK)

只要新的 Activity 在栈内存在,就复用,并清除所有在此之上的 Activity 。

singleInstance 模式

此 Activity 只要存在,就返回,并且此 Activity 单独构成一个任务栈。

FLAG_ACTIVITY_CLEAR_TOP

一般被启用的 Activity 是 singleTask 的,如果栈中不存在,则创建新的;如果存在,则清除之上的 Activity 并回调 onNewIntent 。如果不是 singleTask 模式,是普通模式,则会包含此 Activity 之上的清除之后,重新创建新的入栈。

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

此 Activity 不会出现在历史 Activity 的列表中。