美文网首页
Activity生命周期和启动模式

Activity生命周期和启动模式

作者: LeeIA_e9f6 | 来源:发表于2017-07-24 11:01 被阅读0次

    此文是android开发艺术探索和android源码设计模式这两本书的读书笔记。

    旧activity onPause后新activity才会启动,新activity onResume后,旧activity onStop.,所以onpause不能执行耗时工作

    异常情况下生命周期

    资源相关系统配置发生改变,onSaveInstanceState在onstop之前调用,保存当前Activity状态,onRestoreInstanceState在onCreat之后

    onSaveInstanceState源码分析

    http://www.jianshu.com/p/520e6b47c57b是备忘录模式

    具体到最后是

    ActivityClientRecord.state=Bundle.putBundle(window-Tag,Bundle.putSparseParcelableArray(ContentParentView-Tag,put(viewid(包括viewgroupid),state)))

    就是保存的信息保存到ActivitClientRecord中

    onSaveInstanceState调用几种可能

    1.home键 短按长按

    2.按电源键

    3.屏幕切换电话打入

    4.启动新activity

    通过指定configChanges属性避免属性改变导致Activity重新创建,会调用onConfigurationChanged方法

    资源内存不足时同上一样

    启动模式

    standart 谁启动了这个Activity它就在启动它的activity的栈中,如果没有任务栈就会报错,如applicationContext去启动,需要指定Flag_activity_new_task,实际上是singletask方式去启动。

    singletop 如果已经在栈顶,不会重新创建,会调用 onnewintent方法 onpause onnewintent onpause顺序FLAG_ACTIVITY_SINGLE_TOP

    singletask会首先寻找是否存在任务栈,没有创建。默认具有cleartop的效果。一种情况,后台任务栈中被启动,那后台任务栈会和前台任务栈合并。FLAG_ACTIVITY_NEW_TASK

    singleinstance单独存在一个任务栈

    TaskAffinity默认为应用的包名,如果需指定,属性值为字符串,必须含有包名分隔符"."。

    和allowTaskReparenting结合,应用A启用应用B的Activity时,当应用B被启动时,允许从当前A任务栈转移到应用B的任务栈,并显示,也就是不显示b的主Activity

    指定启动模式有两种方法

    AndroidMenifest

    无法设置clear_top

    intent.addflags

    无法指定singleInstance

    FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

    不会出现在历史Activity列表中和android:excludeFromRecents=true

    IntentFilter匹配规则

    必须同时匹配action category data

    Action必须存在且匹配

    category指定的必须每一个匹配,不指定startActivity\startActivityForResult默认加上android.intent.categroy.DEFAULT,所以intentfilter需要指定DEFAULT

    data如果intentfilter定义了,intent必须匹配,包含两部分mimeType和URI

    如果URI中没有指定Scheme默认为file和content

    如果用intent指定完整data,必须用setDataAndType

    resolveActivity(Intent,MATCH_DEFAULT_ONLY)方法查询匹配到的action,匹配不到返回null.

    MATCH_DEFAULT_ONLY只匹配category为DEFAULT的Activity

    Activity源码分析

    应用启动的入口是ActivityTread.main(String[] args)方法

    下面是手写的流程,很乱,大括号表示一个方法调用另一个方法

    Activity生命周期和启动模式 Activity生命周期和启动模式

    模板模式封装固定的流程比如用final修饰,包含固定步骤,可变部分方法用abstract修饰

    相关文章

      网友评论

          本文标题:Activity生命周期和启动模式

          本文链接:https://www.haomeiwen.com/subject/xezvkxtx.html