【Android】1.1 Activity学习与面试重点详解
什么是Activity?
虽然Activity是我们开发过程中最常用的组件,但是别人这样一问肯定还是会有点蒙。
在Android应用中,Activity是与用户交互的接口,提供界面让用户点击、滑动等操作。
本章目录
一、Activity生命周期
1. Activity的4种状态
running / paused / stopped / killed
- running
活动状态,用户可以点击屏幕并作出响应,处于Activity栈顶- paused
失去焦点,无法与用户交互,被非全屏或透明Activity占据焦点- stopped
不可见,被其他Activity完全覆盖- killed
被回收掉
2. Activity生命周期分析
- 启动:
onCreate() -> onStart() -> onResume()- 点击Home键回到主界面
onPause() -> onStop()- 当我们再次回到Activity时
onRestart() -> onStart() -> onResume()- 退出当前Activity
onPause() -> onStop() -> onDestroy()
- onCreate() 创建活动
- onStart() 可见不可交互
- onResume() 可交互
- onPause() 暂停状态
- onStop() 停止
- onDestroy() 正在被销毁
- onRestart() 不可见变为可见
3. Android进程优先级
前台 / 可见 / 服务 / 后台 / 空
- 前台
与用户正在交互的Activity,或绑定在前台进程的Service- 可见
可见但不可交互的Activity- 服务
后台开启的Service- 后台
按Home键后不可见- 空
处于缓存目的保留,以上四种之外的
二、Android任务栈
- android任务栈又称为Task,它是一个栈结构,具有后进先出的特性,用于存放我们的Activity组件。
- 我们每次打开一个新的Activity或者退出当前Activity都会在一个称为任务栈的结构中添加或者减少一个Activity组件,因此一个任务栈包含了一个activity的集合, android系统可以通过Task有序地管理每个activity,并决定哪个Activity与用户进行交互:只有在任务栈栈顶的activity才可以跟用户进行交互。
- 在我们退出应用程序时,必须把所有的任务栈中所有的activity清除出栈时,任务栈才会被销毁。当然任务栈也可以移动到后台, 并且保留了每一个activity的状态. 可以有序的给用户列出它们的任务, 同时也不会丢失Activity的状态信息。
- 需要注意的是,一个App中可能不止一个任务栈,某些特殊情况下,单独一个Actvity可以独享一个任务栈。还有一点就是一个Task中的Actvity可以来自不同的App,同一个App的Activity也可能不在一个Task中。
三、Activity启动模式
1. Standard(默认)
每次新创建Activity,压入栈顶
2. SingleTop(栈顶复用)
检测任务栈顶是否存在该Activity,若存在则直接复用,调用 onNewIntent() 方法
3. SingleTask(栈内复用)
检测整个任务栈是否存在Activity,若存在则置于栈顶,并把栈上部的其他Activity销毁
4. SingleInstance(单一实例模式)
- 以singleInstance模式启动的Activity具有全局唯一性,即整个系统中只会存在一个这样的实例。
- 以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。
- 以singleInstance模式启动的Activity具有独占性,即它会独自占用一个任务,被他开启的任何activity都会运行在其他任务中。
- 被singleInstance模式的Activity开启的其他activity,能够在新的任务中启动,但不一定开启新的任务,也可能在已有的一个任务中开启。
四、Scheme跳转协议
页面内跳转协议,如通知栏、H5、第三方APP跳转到本APP特定页面等