1. 说下Activity生命周期
2. Activity A 启动另一个Activity B 会调用哪些方法?如果B是透明主题的又或则是个DialogActivity呢
3. 说下onSaveInstanceState()方法的作用 ? 何时会被调用?
它只有具备以下条件的时候才会触发:
· 当按下HOME键的时
· 长按HOME键,选择运行程序的时
· 按下电源(关闭屏幕显示)时
· 从Activity中启动其他Activity时
· 屏幕方向切换时(例如从竖屏切换到横屏时)
4. Activity的启动流程
5. onSaveInstanceState(),onRestoreInstanceState的掉用时机
如果用户主动关闭Activity,方法不会调用;如果用户离开Activity(按Home键回到桌面或跳转到其他Activity)那么当Activity不可见的时候,就会调用onSaveInstanceState(Bundle outState),来保存UI数据,因为当Activity不可见的时候,它的优先级最低,在系统内存不足时,最容易被系统销毁。如果该方法被调用,那么在Android 9.0之后,保存方法会在onStop()方法之后调用;在Android 9.0之前,保存方法在onStop()方法之前调用,但不能保证是在onPause()方法之前还是之后调用。如果onRestoreInstanceState(Bundle)方法被调用,那么是在onStart()之后,onResume()之前被调用。
6. activity的启动模式和使用场景
1.标准模式(standard):
每启动一次Activity,就会创建一个新的Activity实例并置于栈顶。谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的栈中。
应用场景:一般我们不主动设置启动模式,都是标准模式。
2.栈顶模式(singleTop):
如果栈顶存在该activity的实例,则复用,不存在新建放入栈顶。
应用场景:(1)点击通知跳详情(2)新闻详情页,点击推荐新闻条目
3.栈内模式(singleTask):
如果栈内存在该activity的实例,会将该实例上边的activity全部出栈,将该实例置于栈顶,如果不存在,则创建
应用场景:(1)APP的home页面,如果跳转到其他页面后又要跳回来(2)浏览器的主页
4.单例模式(singleInstance):
新开一个任务栈,该栈内只存放当前实例
应用场景:项目中语音通话功能,来电话显示页面采用的就是singleinstance模式
如何设置:清单文件中,activity节点下lauchmode属性如果使用了栈顶或栈内模式,通过onNewIntent回调中的Intent参数来接收传递的内容
7. Activity A跳转Activity B,再按返回键,生命周期执行的顺序
8. 横竖屏切换,按home键,按返回键,锁屏与解锁屏幕,跳转透明Activity界面,启动一个 Theme 为 Dialog 的Activity,弹出Dialog时Activity的生命周期
9. onStart 和 onResume、onPause 和 onStop 的区别
这个其实很好理解与区分:
onPause和onStop就是当前的activity看不到了(就是在后台了),那么就会回调这个比如:
1.在当前activity按了home按键回到桌面,就会回调onPause和onStop
2.从当前activity跳到另一个activity也会回调onPause和onStop
3.在当前的activity弹出一个dialog,此时的activity不在最上层了(但此时还在前台),那么只会调用onPause(告诉使用者我要暂停一下,先处理dialog)结论:activity已经到了后台,那么就会掉到onStop,如果还在前台可见弹窗这样的情况,就只会调用onPause
onStart和onResume和上面的一样,以下三点对应上面的三点:
1.从桌面返回activity会调用onStart和onResume
2.返回到当前的activity也会调用onStart和onResume
3.dialog消失(dismiss)之后,只会调用onResume
10. Activity之间传递数据的方式Intent是否有大小限制,如果传递的数据量偏大,有哪些方案
11. Activity的onNewIntent()方法什么时候会执行
12. 显示启动和隐式启动
a.显式Intent(Explicit intent):通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的。
b. 隐式Intent(Implicit intent):通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间。
13. scheme使用场景,协议格式,如何使用
14. ANR 的四种场景
在Android系统中,应用程序的响应由Activity Manager及Window Manager两个系统服务所监控。通常情况下,应用出现如下四类情况时,系统将报ANR:
KeyDispatchTimeout(最常见类型)—— input事件5s内未处理完成导致ANR发生,主要为按键和触摸事件;
日志关键字:InputDispatching Timeout
BroadcastTimeout:—— BroadcastReceiver在特定时间内未处理完成导致ANR发生(限制:前台广播10s;后台广播60s);
日志关键字:Timeout of broadcast BroadcastRecord
ServiceTimeout —— Service在特定的时间内未处理完成导致ANR发生。(限制:前台服务20s;后台服务200s);
日志关键字:Timeout executing service
ContentProviderTimeout —— 内容提供者,在10s内未处理完成导致ANR发生;
日志关键字:Timeout publishing content providers
15. onCreate和onRestoreInstance方法中恢复数据时的区别
因为onSaveInstanceState 不一定会被调用,所以onCreate()里的Bundle参数可能为空,如果使用onCreate()来恢复数据,一定要做非空判断。而onRestoreInstanceState的Bundle参数一定不会是空值,因为它只有在上次activity被回收了才会调用。
onRestoreInstanceState是在onStart()之后被调用的。有时候我们需要onCreate()中做的一些初始化完成之后再恢复数据,用onRestoreInstanceState会比较方便。
16. activty间传递数据的方式
以下为四种常用的传递数据方式
· 1.通过Intent传递数据
· 2.通过静态变量(static)传递数据
· 3.通过剪贴板(Clipboard)传递数据
· 4.通过全局对象传递数据
· 使用Intent的putExtra传递
17. 跨App启动Activity的方式,注意事项
18. Activity任务栈是什么
https://blog.csdn.net/yh_coco/article/details/79427595?spm=1001.2014.3001.5502
19. 有哪些Activity常用的标记位Flags
Activity的Flags有很多,这里主要分析一些常用的标记位。
FLAG_ACTIVITY_NEW_TASK
此标记位作用是为Activity指定“singleTask”启动模式,其效果和在XML中指定相同android:launchMode="singleTask"
FLAG_ACTIVITY_SINGLE_TOP
此标记位作用是为Activity指定“singleTop”启动模式,其效果和在XML中指定相同android:launchMode="singleTop"
FLAG_ACTIVITY_CLEAR_TOP
具有此标记位的Activity,当它启动时,在同一个任务栈中位于它上面的Activity都要出栈。此标记位一般会和singleTask启动模式一起出现,此情况下,若被启动的Activity实例存在,则系统会调用它的onNewIntent。
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
具有此标记位的Activity不会出现在历史Activity的列表中,当某些情况我们不希望用户通过历史列表回到我们的Activity时这个标记比较有用。他等同于在XML中指定Activity的excludeFromRecents属性。android:excludeFromRecents="true"
20. Activity的数据是怎么保存的,进程被Kill后,保存的数据怎么恢复的
1、保存数据的方法:onSaveInstanceState(Bundle outState)
触发条件:Activity未执行finish,比如按了home键,电源键,旋转Activity,内存不足等。这种数据保存都是临时的。如果想保存一些持久数据,用onPause
2、恢复数据的方法:onRestoreInstanceState(BundlesavedInstanceState)
触发条件:onSaveInstanceState已经触发,Activity被系统回收之后,再次打开。
3、恢复数据的方法:Create(Bundle savedInstanceState)
触发条件:创建Activity实例的时候