四大组件之Activity|Android开发系列

322 阅读3分钟

什么是Activity?

   Activity是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作, 比如打电话,照相,发送邮件,或者显示一个地图!Activity可以理解成一个绘制用户界面的窗口, 而这个窗口可以填满整个屏幕,也可能比屏幕小或者浮动在其他窗口的上方。

生命周期

Activity生命周期

image.png

弹出Dialog时生命周期

image.png

异常情况下的生命周期

情况1:资源相关的系统配置发生改变导致Activity被杀死并重新创建

   横竖屏切换,默认情况下Activity会被销毁其onPause(),onStop(),onDestory(),均会被调用,同时由于Activity是在异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activity的状态(在onStop之前,onPause之前之后都有可能)。

   当Activity创新创建时,系统会调用onRestoreInstanceState(),并且把Activity销毁时onSaveInstanceState()所保存的Bundle对象作为参数同时传递给onRestoreInstanceState()和onCreate()。onRestoreInstanceState(在onstart之后调用)

在onSaveInstanceState 和onRestoreInstanceState 中系统会自动为我们做一些回复工作。

 

情况2:资源内存不足导致低优先级的Activity被杀死

Activity优先级高到低

(1)前台Activity---正在和用户交互的Actvity,优先级最高

(2)可见但非前台Activity---比如Activity中弹出来一个对话框,导致Activity可见但是位于后台无法和用户直接交互。

(3)后台Activity---已经被暂停的Activity,比如执行了onStop,优先级最低。

 

<如果一个进程中没有四大组件在执行,那么它将很快被系统杀死,后台工作应该放如Service中保证有一定的优先级,这样就不会轻易被杀死>

启动模式

standard

  默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。

image.png

singleTop

  可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。如果栈顶Activity为我们要新建的Activity(目标Activity),那么就不会重复创建新的Activity。

image.png

singleTask

  与singleTop模式相似,只不过singleTop模式是只是针对栈顶的元素,而singleTask模式下,如果task栈内存在目标Activity实例,则:

    1.将task内的对应Activity实例之上的所有Activity弹出栈。

    2.将对应Activity置于栈顶,获得焦点

singleInstance

  在该模式下,我们会为目标Activity分配一个新的affinity,并创建一个新的Task栈,将目标Activity放入新的Task,并让目标Activity获得焦点。新的Task有且只有这一个Activity实例。

  如果已经创建过目标Activity实例,则不会创建新的Task,而是将以前创建过的Activity唤醒(对应Task设为Foreground状态

问题:1,2,3三个Activity,2是singleInstance模式,然后1->2,2->3,之后狂点back,在回到Home界面后点击菜单键,首先启动的是哪个Activity?

2Activity