手记

Activity


用户交互第一窗口,采用Activity栈管理Activity


1.Activity形态

  • Active/Running

栈顶可见,与用户交互

  • Paused

新的非全屏或者透明的Activity来到栈顶
失去焦点和与用户交互能力,状态信息、成员变量保留
内存极低情况会被系统回收

  • Stopped

新的Activity完全覆盖
不再可见
状态信息、成员变量依然保留

  • Killed

被系统回收掉


2.Activity生命周期

只有三个状态稳定,其他状态为过渡状态

Resumed Paused Stopped
Active/Running形态,栈顶交互 失去焦点,不接收输入 后台运行,不可见
onCreate()
创建基本UI元素
onResume()
需要重新初始化在onPause()中释放的资源
onPause() and onStop()
清除Activity资源,避免浪费
释放系统资源
onDestroy()
引用会在Activity销毁时销毁,但线程不会,所以清除开启的线程

3.启动模式

  • standard

    默认启动模式,每次都会创建新的实例

  • singleTop

    检查栈顶,栈顶是当前Activity则复用,不是就创建

    复用时会调用onNewIntent()

  • singleTask

    检查整个栈,存在则置于栈顶,且该Activity之上的其他Activity全部销毁出栈

    onNewIntent()会被调用

    其他程序启动不同程序的singleTask模式的Activity,如果该Activity有任务栈则整栈切至前台,如果没有则创建任务栈移至前台

  • singleInstance

    Activity出现在一个新的任务栈,该栈就只有这一个Activity
    不同程序可共享这个Activity


4.Intent Flag启动模式

  • FLAG_ACTIVITY_NEW_TASK
    启动的每个Activity都在一个新的栈中,通常用在Service启动Activity,因为Service不存在Activity栈

  • FLAG_ACTIVITY_SINGLE_TOP
    同singleTop

  • FLAG_ACTIVITY_CLEAR_TOP
    同singleTask

  • FLAG_ACTIVITY_NO_HISTORY
    当该Activity启动其他Activity后,自身就被销毁了,不会保留在Activity栈中


5.清空任务栈

在<Activity>标签中使用

  • clearTaskOnLaunch
    启动界面中设置为true,启动其他界面,home键回到手机主界面,再由图标进入程序,其他的界面会被销毁只留下启动界面

ps:我试了下,毫无效果

  • finishOnTaskLaunch
    跟clearTaskOnLaunch差不多,上面是其他界面被销毁,这个效果是自己被销毁

  • alwaysRetainTaskState
    设置为true,该Activity所在Task将不接收任何清除指令,一直保持当前Task状态

0人推荐
随时随地看视频
慕课网APP