- 当Activity处于运行状态时,Android会尽可能地保持这种状态,即使出现内存不足的情况,Android也会先销毁恚底的Activity,来确保当前Activity正常运行。
- 需要注意的是,Activity生命周期的启动状态和销毁状态是过渡状态,Activity不会在这两个状态停留。
| 方法 | 说明 |
|---|---|
| onCreate:创建活动 | 此时会把页面布局加载进内存,进入了初始状态。 |
| onStart:开启活动 | 此时会把活动页面显示在屏幕上,进入了就绪状态。 |
| onResume:恢复活动 | 此时活动页面进入活跃状态,能够与用户正常交互,例如允许响应用户的点击动作、允许用户输入文字等。 |
| onPause:暂停活动 | 此时活动页面进入暂停状态(也就是退回就绪状态),无法与用户正常交互。 |
| onStop:停止活动 | 此时活动页面将不在屏幕上显示。 |
| onDestroy:销毁活动 | 此时回收活动占用的系统资源,把页面从内存中清除掉。 |
| onRestart:重启活动 | 处于停止状态的活动,若想重新开启的话,无须经历onCreate的重复创建过程,而是走onRestart的重启过程。 |
| onNewIntent:重用 | 已有的活动实例 |

- 如果一个Activity已经启动过,并且存在当前应用的Activity任务栈中,启动模式为singleTask,singleInstance或singleTop(此时已在任务栈顶端),那么在此启动或回到这个Activity的时候,不会创建新的实例,也就是不会执行onCreate方法,而是执行onNewIntent方法。



Activity需要在Androidmanifest.xml文件中配置组件Androidmanifest.xml文件中标签中package属性指定的包名一致。android:name的属性可以直接设置为.Activity组件名
startActivity()。Intent参数是Android应用中各个组件之间通信的桥梁。public void startActivity(Intent intent)
new Intent(this, ActFinishActivity.class)
finish()public void finish()
public class MainActivity2 extends AppCompatActivity implementsView.OnClickListener{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);findViewById(R.id.button).setOnClickListener(this);}@Overridepublic void onClick(View view) {finish();}
}
Intent来进行切换| 元素名称 | 设置方法 | 说明与用途 |
|---|---|---|
| Component | setComponent | 组件,它指定意图的来源与目标 |
| Action | setAction | 动作,它指定意图的动作行为 |
| Data | setData | 即Uri,它指定动作要操纵的数据路径 |
| Category | addCategory | 类别,它指定意图的操作类别 |
| Type | setType | 数据类型,它指定消息的数据类型 |
| Extras | putExtras | 扩展信息,它指定装载的包裹信息 |
| Flags | setFlags | 标志位,它指定活动的启动标志 |
来源Activity.this;第二个参数表示待跳转的页面,即目标Activity.class。Intent intent = new Intent(this, ActNextActivity.class); // 创建一个目标确定的意图
Intent intent = new Intent(); // 创建一个新意图
intent.setClass(this, ActNextActivity.class); // 设置意图要跳转的目标活动
Intent intent = new Intent(); // 创建一个新意图
// 创建包含目标活动在内的组件名称对象
ComponentName component = new ComponentName(this, ActNextActivity.class);
intent.setComponent(component); // 设置意图携带的组件信息
Android系统会使用IntentFilter匹配相应的组件,匹配的属性主要包括以下 3个: AndroidManifest中配置Action
MainActivity中开启MainActivity2Intent intent = new Intent();
intent.setAction("start_activity");
startActivity(intent);
AndroidManifest.xml文件的Activity标签下的中,为被开启的Activity指定catrgory为"android.intent.category.DEFAULT"。必须在AndroidManifest.xml文件的Activity标签下的中,为被开启的Activity指定catrgory为"android.intent.category.DEFAULT"。
| Intent 类的系统动作常量名 | 系统动作的常量值 | 说明 |
|---|---|---|
| ACTION_MAIN | android.intent.action.MAIN | App启动时的入口 |
| ACTION_VIEW | android.intent.action.VIEW | 向用户显示数据 |
| ACTION_SEND | android.intent.action.SEND | 分享内容 |
| ACTION_CALL | android.intent.action.CALL | 直接拨号 |
| ACITON_DIAL | android.intent.action.DIAL | 准备拨号 |
| ACTION_SENDTO | android.intent.action.SENDTO | 发送短信 |
| ACTION_ANSWER | android.intent.action.ANSWER | 接听电话 |
AndroidManifest.xml里的intent-filter就是配置文件中的过滤器。像最常见的首页活动MainAcitivity,它的activity节点下面便设置了action和category的过滤条件。其中android.intent.action.MAIN表示App的入口动作,而android.intent.category.LAUNCHER表示在桌面
标答中间可以罗列多个action属性,但是当使用隐式Intent激活组件时,只要Intent携带的action与其中一个标签中action的声明相同,action属性就匹配成功。Activity添加标签时,必须添加action属性,否则隐式Intent无法开启该Activity.
标签中间可以罗列多个data属性,每个data属性可以指定数据的MIME类型和URI。其中,MIME类型可以表示image/ipeg、video/*等媒体类型。category属性用于为action添加额外信息,一个IntentFilter可以不声明category属性,也可以声明多个category属性,在清单文件中设置category属性的示例代码如下:
Intent中声明的category必须全部能够与某一个IntentFilter中的category匹配才算匹配成功。需要注意的是,IntentFilter中罗列的category属性数量必须大于或者等于隐式Intent携带的category属性数量时,category属性才能匹配成功。如果一个隐式Intent没有设置category属性,那么他可以通过任何一个IntentFilter(过滤器)的category匹配。

AndroidManifest.xml,在指定的activity节点添加属性android:launchMode,表示本活动以哪个启动模式运行Intent对象的setFlags方法,表明后续打开的活动页面采用该启动标志


在该模式下,如果栈顶 Activity 为我们要新建的 Activity(目标Activity),那么就不会重复创建新的Activity。

应用场景:适合开启渠道多、多应用开启调用的 Activity,通过这种设置可以避免已经创建过的 Activity 被重复创建,多数通过动态设置使用。
singleTop 模式相似,只不过 singleTop 模式是只是针对栈顶的元素,而 singleTask 模式下,如果task 栈内存在目标 Activity 实例,则将 task 内的对应 Activity 实例之上的所有 Activity 弹出栈,并将对应 Activity 置于栈顶,获得焦点。
Activity,我们可以考虑将其设为 singleTask模式,减少资源耗费
singleInstance,Activity1 和 Activity2 默认(standard)。Background的Task,蓝色的代表 Foreground 的Task。返回时会先把 Foreground 的Task 中的 Activity 弹出,直到 Task 销毁,然后才将 Background的 Task 唤到前台,所以最后将Activity3 销毁之后,会直接退出应用
Manifest中通过launchMode属性设置的,称为静态设置,动态设置是通过 Java 代码设置的。intent.setFlags();
Intent.FLAG_ACTIVITY_NEW_TASK
Intent.FLAG_ACTIVITY_SINGLE_TOP
Intent.FLAG_ACTIVITY_CLEAR_TOP
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |Intent.FLAG_ACTIVITY_SINGLE_TOP);