前言
接下来我将重新回顾Android的核心基础,俗话说万变不离其宗,想必是时候开始总结归纳了。
面试官:什么是Activity?
我:。。。面试官:阐述一下 Activity 的生命周期?
我:。。。面试官:从Activity A跳转到Activity B之后,然后再点击back建之后,它们的生命周期调用流程是什么?
我:。。。面试官:知道Activity的启动流程吗?
我:。。。
看似简单,却只答出个大概,也许这只是平时少总结罢了。
目录
- Activity生命周期
- Activity任务栈
- Activity启动模式
- scheme跳转协议
1、Activity生命周期:
关于Activity的生命周期,离不开经典的流程图
activity生命周期.png
- Activity的4种状态
running(活动状态):
处于可见并可和用户交互的状态。
pause(暂停状态):
这个状态Activity在屏幕上是可见的,但是并不是在屏幕最前端的那个。比如当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态,它仍然可见,却失去了焦点,故不可与用户交互。
stopped(停止状态):
当Activity完全不可见时,此时Activity还在后台运行,仍然在内存中保留Activity的状态。
killed(死亡状态):
Activity被杀掉以后的状态。 - Activity生命周期过程
Activity创建启动:oncreate()-->onstart()-->onresume()
点击Home,或者从A跳到B :onpause()-->onstop()
再次回到Activity,或者从B返回A:onrestart()-->onstart-->onresume()
退出Activity:onpause()-->onstop()-->ondestroy()
有了前面的知识积累后,我相信肯定能更好地分析上面说到的前三条面试题~
2、Activity任务栈:
任务栈采用“后进先出”的栈结构
3、Activity启动模式:
使用方式配置文件中添加launchMode属性,如singleTop:
standard(标准模式):
默认模式,每启动一次Activity,就会创建一个新的Activity实例并置于栈顶。谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的栈中。
singleTop(栈顶复用模式):
Activity处于栈顶时可以复用,就是以这种模式启动的Activity刚好位于任务栈栈顶,那么此Activity的实例就不会重建,而是重用栈顶的实例。并回调onNewIntent方法。
singleTask(栈内复用模式):
整个任务栈都可以复用,比singletop强多了;其次就是singletask下面的所有Activity将会销毁,然后也会回调onNewIntent方法;
singleInstance(单例模式):
栈内复用模式(singleTask)的加强版,启动该Activity时,直接创建一个新的任务栈,并创建该Activity实例放入新栈中,用得比较少。
4、Activity的Flags
Activity的Flags用于设定Activity的启动模式。可以在启动Activity时,通过Intent的addFlags()方法设置。(1)FLAG_ACTIVITY_NEW_TASK
其效果与指定Activity为singleTask模式一致。(2)FLAG_ACTIVITY_SINGLE_TOP
其效果与指定Activity为singleTop模式一致。(3)FLAG_ACTIVITY_CLEAR_TOP
具有此标记位的Activity,当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈。如果和singleTask模式一起出现,若被启动的Activity已经存在栈中,则清除其之上的Activity,并调用该Activity的onNewIntent方法。如果被启动的Activity采用standard模式,那么该Activity连同之上的所有Activity出栈,然后创建新的Activity实例并压入栈中。
5、scheme跳转协议:
- Android中的scheme是一种页面内跳转协议,是一种非常好的实现机制。
- 通过定义自己的scheme协议,可以非常方便跳转APP中的各个页面。
- 通过scheme协议,服务器可以定制化告诉APP跳转哪个页面。
- 可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。使用时在AndroidManifest中设置增加拦截器(intent-filter),设置scheme
总而言之,好记性不如烂笔头,站在岸上学不会游泳。。。因此,实践是检验真理的唯一标准,继续搬砖吧!