Android开发艺术探索读书笔记-Activity

来源:互联网 发布:宁波淘宝店铺运营群 编辑:程序博客网 时间:2024/06/07 06:50

1.Activity的生命周期函数调用顺序,前一个Activity没有执行onPause,后一个Activity的onResume不会被调用。因此不要在onPause中做耗时操作,耗时操作可以放在onStop中
2.异常情况下的生命周期,Activity中的控件也是存在onSaveInstantceState和onRestoreInstanceState方法的,系统会自动的将控件的状态恢复,具体会恢复到什么程度需要在开发的时候注意。Activity的onSaveInstantceState和onRestoreInstanceState用于保存开发者自己添加的属性。
3.onCreate和onRestoreInstanceState的参数bundle都能够用来恢复异常退出的Activity现场,只是onCreate的参数bundle在正常启动的情况下可能为空,需要注意。
4.Activity启动模式
-standard默认,同栈新实例。使用ApplicationContext启动standard模式的Activity会报错,原因是ApplicationContext中不包含任务栈的信息。解决办法是为待启动的Activity设置FLAG_ACTIVITY_NEW_TASK标记位,这样就会创建一个新的任务栈,此时相当于singleTask启动。
-singleTask,先看需要的任务栈存不存在,不存在则创建任务栈;需要的栈存在,去栈中找要启动的Activity实例是否存在,存在则将Activity实例前的其他Activity清栈,并回调其onNewIntent方法;实例不存在则创建Activity实例,然后放到栈顶。
-singleTop,只有待启动的Activity已经在任务栈的栈顶了才不会创建新实例,并调用onNewIntent方法。否则创建新Activity实例。
-singleInstance,单独任务栈,任务栈中只有一个Activity实例。
5.TaskAffinity标识了一个Activity所需要的任务栈的名字,任务栈名字默认为应用的包名。TaskAffinity与singleTask启动模式配合使用,在其他模式下无异议。
6.设置allowTaskReparenting属性为true可以实现,应用的某个Activity被从外部启动,home切出后再由桌面图标启动应用,可回到之前已从外部启动的Activity,而不是打开应用的主页面。
7.查看任务栈命令:adb shell dumpsys activity
8.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS这个activity的Flag等同于XML中指定android:excludeFromRecents=”true”,用于不希望用户过历史列表回到Activity的情况。
9.避免隐式启动找不到符合条件的Activity造成的异常有两种方法:PackageManager的resolveActivity方法和Intent的resolveActivity方法。根据返回值判断是否存在符合条件的activity

原创粉丝点击