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

相關文章
相關標籤/搜索