一、Activity的生命週期
1. activity的四種狀態
- running activity可以活動 用戶可以點擊 處於棧頂的位置
- pause 失去焦點 被acitvity窗口覆蓋 ,或者是透明activity處於棧頂位置 失去和用戶的交互 內存緊張會被回收
- stoped 被完全覆蓋 內存緊張會被回收
- killed 被系統回收掉
2. activity的生命週期
- 啓動 oncreate -->onStart-->onResume
- onStart--用戶可見 但是用戶不能進行交互
- onResume--用戶可見 可以進行交互
- onpause --->onStop 點擊home返回主界面
- onpause--處於停止狀態,用戶不可見,內存緊張會被回收
- onStop ----完全覆蓋,內存緊張會被回收
- 再次回到原activity onreStart->onStart->onResume
- 退出onPause->onStop->onDestroy
3.android中進程優先級
- 前臺
- 可見
- 服務 (service)
- 後臺 (不可見的狀態)
- 空
4.activity狀態保存
爲什麼平時並沒有實現onSaveInstanceState()和onRestoreInstanceState()方法,但是有些時候,Activity中的UI狀態依然得到了保存,是爲什麼?
在Android中,Activity類的onSaveInstanceState()方法默認實現會調用佈局中每個View的onSaveInstanceState()方法去保存其本身的狀態信息,Android框架中幾乎每個控件都會實現這個方法。我們只需要爲想要保存其狀態的每個控件提供一個唯一的ID(在xml中設置 android:id屬性),如果控件沒有 ID,則系統無法保存其狀態。
我們可以通過將View的android:saveEnabled屬性設置爲false或通過調用View的setSaveEnabled()方法顯式阻止佈局內的視圖保存其狀態,通常不需要設置這些屬性,但如果想以不同方式恢復Activity UI的狀態,可以這樣做。
二、android中的任務棧 和activity的啓動模式
1.standard
- 標準的跳轉方式,可以複用activity,爲了避免重新創建消耗內存資源
2.singletop
- 棧頂複用模式,如果創建的activity在棧頂,就不會重新創建,複用棧頂
3.singletask
- 棧內複用模式,單例模式,當前棧中有此activity,就會放在棧頂,並且將它之上的activity進行移除,此時會回調onNewIntent方法
3.singleinstance
- 棧中有且僅有一個實例
三、scheme跳轉協議
Android中的Scheme是一種頁面內跳轉協議,通過自定義Scheme協議,可以跳轉到app中的任何頁面。
-- Uri.parse("qh://test:8080/goods?goodsId=8897&name=fuck")
- 服務器可以定製化跳轉app頁面
- app可以通過Scheme跳轉到另一個app頁面
- 可以通過h5頁面跳轉app原生頁面