1.Activity的生命周期 生命周期這個事情,是android工程師最基礎的知識,所以今天要講的是一些不一樣的東西。 1.1 OnStart,OnResume,OnPause,OnStop 他們的區別是什麼? OnStart & OnStop, 這一對發生的時候,頁面已經顯示,但是處於backg ...
1.Activity的生命周期
生命周期這個事情,是android工程師最基礎的知識,所以今天要講的是一些不一樣的東西。
1.1 OnStart,OnResume,OnPause,OnStop 他們的區別是什麼?
OnStart & OnStop, 這一對發生的時候,頁面已經顯示,但是處於backgroud的狀態,所以用戶無法看到。
OnResume & OnPause,發生在用戶可以看到頁面,也就是從後臺到前臺。
OnPause->OnStop,如果下個頁面是透明的,OnStop不會被呼叫。
2.Activity的啟動flag
4大啟動模式,也是最基本的知識,。
只有activity可以啟動其他的
application 啟動activity,由於沒有歷史棧,需要加flag:FLAG_ACTIVITY_NEW_TASK
這樣這個activity會存在一個新task
FLAG_ACTIVITY_NEW_TASK:這個標誌同singtask launchmode的效果一樣。
FLAG_ACTIVITY_SINGLE_TOP:這個標誌同singletop 效果一樣。
FLAG_ACTIVITY_CLEAR_TOP: 會把在task 棧上面的activity,出棧。
3.intentFilter
intentFilter是用於隱式調用的,顯示調用&隱式調用同時存在,將以顯示調用為準
intentFilter有三個部分組成:action,category,& data
一個activity可以有幾組intentFilter,只要匹配一個,就可以啟動activity
但是必須同時瞞住action,category & data的匹配,才能保證activity被啟動。
同一個intentFilter可以有幾個action,只要滿足一個就可以,同理category & data也是。
Action:action的字串,必須完全一致,才能算作匹配。
Category:category可以有多個,但是每一個都必須同 intentFilter的某一個匹配。Category也可以為空,這樣系統會預設為我們加上action.intent.category.DEFAULT 這樣就要求每個支持隱式調用的activity,都必須有action.intent.category.DEFAULT
Data:data的匹配規則跟action相似。只要匹配一個元素,但是必須使用setdataandType 方法來設定。Setdata & setType這2個方法是互斥的。
當我們在使用隱式啟動activity的時候,可以先使用PackageManager的resolveActivity 或者Intent的resolveActivity,在查詢的時候,需要加flag:MATCH_DEFAULT_ONLY
還有一個特殊的頁面:action = android.intent.action.MAIN category=android.intent.category.LAUNCH缺一不可