基础篇一:Activity与Activity使用分析

1 前言

Activity是四大组件中最常用组件,了解Activity,是开发高质量的应用的必须条件。下面有四个问题来学习Activity

  Activity的形态 ? 

  Activity的生命周期?

  Activity状态保存于恢复?

  Activity的四种启动模式对比?

2 Activity的起源

Activity是与用户交互的第一接口,它提供的是一个用户完成指令的窗口。当我们创建Activity之后,通过调用setContentView(View)方法来给>该Activity指定一个显示的界面,并且以此为基础提供给用户交互的接口。系统采用Activity栈的方式来管理Activiity。

3 Activity的四大形态

Active/Running

这时候,Activity处于Activity栈的最顶层,是可见,并且与用户进行交互。

Paused

当Activity失去焦点,被一个新的非全屏的Activity或者是一个透明的Activity放置在栈顶时,Activity就转化成Paused形态。但它只是失去了与用 >户交互的能力,所有的组昂太爱信息,成员变量都还保持着,只有在系统内存极低的情况下,才会被系统回收掉。

Stoped

如果一个Activity被另一个Activity完全覆盖,那么Activity就会进入Stopped形态,此时它不在可见,但是依然保持了所有的状态信息和成员变
量。

Killed

当Activity被锡系统回收掉或者是Activity从来没有创建过,Activity就处于Killed形态。

3 Activity的生命周期

基础篇一:Activity与Activity使用分析_第1张图片
Activity生命周期

在此图中的多个Activity生命周期中,只有三个状态是稳定的,而其他状态都是过度状态:

Resumed(可见,可与用户交互)

这个状态就是前面说的Active/Running形态,此时Activity处于Activity栈顶,处理用户的交互。

Paused (部分可见,不可与用户交互)

当Activity的一部分被遮挡的时候进入这个状态,这个状态下的Activity不会接受用户输入。

Stopped

当Activity完全被覆盖时进入这个状态,此时Activity不可见,仅在后台运行

启动正常流程
onCreate() 创建基本的UI元素
onStart() 调用Activity的资源
onResume() 调用系统资源,显示

销毁正常流程
onPaused() 释放系统资源
onStop() 清除Activity的资源,避免浪费
onDestory() 销毁Activity

4 Activity状态保存于恢复

官方版重新创建 Activity

当Activity的onSaveInstanceState调用的时候,Activity会自动收集View层级中每个View的状态。请注意只有在内部实现了View的保存/恢复状态方法的View才会被收集到。一旦onRestoreInstanceState方法被调用,Activity会把收集的数据发送回给View结构树中具有相同android:id配置的View。

虽然View的状态被自动保存了,但是Activity的成员变量并没有。他们会随着Activity一并销毁。你需要通过onSaveInstanceState和onRestoreInstanceState手动保存并恢复这些变量。

public class MainActivity extends AppCompatActivity {
// These variable are destroyed along with Activity
private int someVarA;
private String someVarB;
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("someVarA", someVarA);
outState.putString("someVarB", someVarB);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
someVarA = savedInstanceState.getInt("someVarA");
someVarB = savedInstanceState.getString("someVarB");}’
‘}`

5 Activity的启动模式对比

AndroidManifest启动模式:

standard

默认的启动模式,标准模式,每次都会创建新的实例。 两次创建同一个Activity,获得两个不同的实例。

singleTop

系统会判断当前任务栈的顶部Activity是不是要启动的Activity。如果是则引用当前Activity,如果不是则创建新的Activity。适用于接收到消息后显示的界面,例如QQ接收到消息,如果来10条消息,不能一次弹出10个Activity。

singleTask

情况一,在同一个App的Activity栈中启动时,如果存在,这把在栈中此Activity以上的Activity都销毁,把其置于栈顶;如果不存在,则置其于栈顶。
PS:主Activity使用此模式,重载onNewIntent() 中finish(),可用于退出应用程序。

情况二,不同的app或两个栈
会把被调用的栈的所有Activity置于当前栈的栈顶,如何调用Activity以上有其他Activity,则销毁。

singleInstance

类似于浏览器的启动模式,应用A与应用B分别启动singleInstance的Activity则两者得到的是同一个,共享实例,而且任务栈中只能存在一个该Activity。

Intent Flag启动模式:

Intent.FLAG_ACTIVITY_NEW_TASK
standard

Intent.FLAG_ACTIVITY_SINGLE_TOP
singleTop

Intent.FLAG_ACTIVITY_CLEAR_TOP
singleTask

Intent.FLAG_ACTIVITY_NO_HISTORY
Activity A B C A启动B为Intent.FLAG_ACTIVITY_NO_HISTORY,B启动C,则任务栈中为AC,没有B。

你可能感兴趣的:(基础篇一:Activity与Activity使用分析)