Activity

Activity生命周期:android

        onStart(),onStop()是从Activity是否可见这个角度来回调的spa

        onResume(),onPause()是从Activity是否位于前台来回调的生命周期

Activity启动过程简单理解:内存

        启动Activity的请求是由Instrumentation来处理,而后它经过Binder向AMS发送请求,AMS内部维护着有个ActivityStack并负责栈内的Activity的状态同步,AMS经过ActivityThread去同步Activity的状态从而完成生命周期方法的调用。资源

        不能再onPause()中作重量级的操做,由于必须onPause()执行完之后新Activity才能够onResume同步

        系统只在Activity异常终止的时候才会调用onSaveInstanceState与onRestoreInstanceState来储存和恢复数据,其余状况不会触发这个过程。可是按Home键或者启动新Activity仍然会单独触发onSaveInstanceState的调用工作流

Activity异常状况下的生命周期:it

        1.  资源相关的系统配置发生改变致使Activity被杀死并从新建立io

        保存和恢复view工做流程:容器

      Activity被之外终止时,Activity会调用onSaveInstanceState去保存数据,而后Activity会委托Window去保存数据,接着Window再委托它上面的顶级容器去保存数据,顶层容器是一个ViewGroup,通常来讲它极可能是DecorView,最后顶层容器再去一一通知它的子元素来保存数据。

        2.资源内存不足致使低优先级的Activity被杀死

        (1)前台Activity——正在和用户交互的Activity,优先级最高

        (2)可见但非前台Activity——加入Activity中弹出了一个对话框,致使Activity可见可是位于后台没法和用户直接交互

        (3)后台Activity——已经被暂停的Activity,好比执行了onStop,优先级最低

 

        若是说不想在屏幕旋转的时候从新去建立Activity的时候能够给configChanges属性添加orientation这个值        android.configChanges="orientation"

 

 

 

 

Activity启动模式:

        singleTask

        状况一:先要去判断你如今有没有这个任务栈,若是没有任务栈,会去建立一个任务栈,而后建立实例去放到这个任务栈里面

        状况二:有这个任务栈,直接去建立一个实例

        状况三:有任务栈,也有实例,可是这个实例不在栈顶,他会把在他上面的一些实例全都干掉,而后直接去调用onNewIntent() 

 

 

IntentFilter匹配规则

    隐式Intent

    一个Activity能够有多个IntentFilter,可是只须要有一个是相对匹配的,就能够进行跳转界面

    1.action的匹配规则

        若是有多个action,那么只有一个action能够匹配成功也能够仅从跳转,可是匹配区分大小写

    2.actegory

      若是有多个actegory,那么必须全部的actegory都匹配成功,可是你能够不写actegory,不写actegory也能够匹配成功

    3.data

        data由俩部分组成:mimeType和Uri

        mimeType指媒体类型

    

 

 

Uri:

        Scheme:Uri的模式,也能够说是协议,好比http,content,Scheme必须指定

        Host:Uri的主机名,好比www.baidu.com, Host必须指定

        Port:端口号,只有在Scheme跟Host设置的状况下,才会有意义

        Path、pathPattern、pathPrefix:

            Path:完整的路径

            pathPattern:完整的路径,能够包含通配符

            pathPrefix:表示路径的前缀信息

 

    若是要为Intent设置完整的data,使用intent.setDataAndType();

    当启动一个隐式Intent的时候,能够去判断一下是否有匹配的Activity,避免发生错误

    判断方法:

        1.PackageManger.resolveActivity

        2.intent.resolveActivity

        若是找不到相匹配的Activity就会返回null

相关文章
相关标签/搜索