目錄
Activity的五種生命狀態
Activity的生命周期
常見場景的生命周期呼叫方式
Activity的四種啟動模式
如何給Activity指定啟動模式
兩種方式的區別
IntentFilter的匹配規則
action匹配規則
category匹配規則
data匹配規則
Activity的五種生命狀態
1.啟動狀態
2.運行狀態:該狀態是可見的,可以與用戶進行資料互動的
3.暫停狀態:該狀態在某些情況下是可見的,但是用戶對它的操作沒有回應
4.停止狀態:該狀態下是不可見的,當系統記憶體不足時,該狀態下的Activity很容易被銷毀
5.銷毀狀態
Activity的生命周期
OnCreate():Activity剛開始創建時,生命周期的第一個方法
OnStart():Activity在啟動時,此時的界面還是不可見的,還無法與用戶進行互動
OnCreate() 和 OnStart()方法一般用來加載布局
OnResume():第一次Activity啟動完畢或者是Activity由暫停狀態(OnPause狀態)重新回到當前Activity,
OnResume()方法一般用來做資料恢復和展示
OnPause():Activity暫停時,此時的界面仍可見,
OnPause()方法一般是用來做資料存盤、停止影片、注銷廣播等,但是不能做耗時操作(我在后面會講為什么不能)
OnStop():Activity不在UI最頂層或者說該界面完全不可見,
OnStop()方法一般用來做回收作業和資源的釋放
OnRestart():Activity由OnStop狀態恢復到UI的最頂層,
OnRestart()用來做資料恢復
OnDestory():Activity被銷毀
OnDestoy()用來做回收作業和資源釋放
常見場景的生命周期呼叫方式
1.啟動一個Activity ,會執行OnCreate()->OnStart()->OnResume()
2.銷毀一個Activity,會執行OnPause()->OnStop()->OnDestory()
3.由ActivityA跳轉到ActivityB,會執行OnPause()->OnCreate()->OnStart()->OnResume()->OnStop()
4.點擊back鍵回退時,會執行OnPause()->OnStop()->OnDestory()
5.再次回到原Activity時,會執行OnRestart()->OnStart()->OnResume()
6.點擊home鍵時,會執行OnPause()->OnStop()方法,當重新進入是會執行OnStart()->OnResume(),因此想關閉聲音等操作我們一般是放在OnPause()->OnStop()方法中,恢復資料資訊是放在OnStart()->OnResume()中
7.資源發生變化時(比如發生手機橫屏切換豎屏等)OnSaveInstanceState()(用來保存當前狀態的一些資訊)->OnPause()->OnStop()->OnDestory() 當重新被創建時 會執行OnCreate()->OnStart()->OnRestoreInstanceState()(恢復資料)->OnResume()
面試題:兩個Activity之間跳轉時必然會執行的是哪幾個方法? 答:當在A Activity里面激活B Activity的時候, A會呼叫onPause()方法,然后B呼叫onCreate() ,onStart(), onResume(), 這個時候B覆寫了A的表單, A會呼叫onStop()方法, 如果B是個透明的視窗,或者是對話框的樣式, 就不會呼叫A的onStop()方法, 如果B已經存在于Activity堆疊中,B就不會呼叫onCreate()方法, 故一定會執行A的onPause()和B的onStart()與onResume(),
Activity的四種啟動模式
standard:標準模式,也是系統的默認模式,每次啟動一個Activity都會創建一個新的Activity
singleTop:堆疊頂復用模式,在創建Activity之前如果新的Activity在堆疊頂,那么這個Activity就不會被創建,只會回呼onNewIntent方法,如果該Activity不在堆疊頂就會重新創建實體,
singleTask:堆疊內復用模式,當創建一個新的Activity A時,系統首先會去尋找是否存在A想要的任務堆疊,如果不存在,就會重新創建一個任務堆疊,然后創建A實體后把A放到堆疊中,如果存在A所需的任務堆疊,再看堆疊中是否有實體存在,如果存在,就會將A上面的所有物件出堆疊,直到A位與堆疊頂,如果不存在,則會實體化一個A放入堆疊頂,
singleInstance:單實體模式,具有singleTask模式的所有特性,具有此種模式的Activity只能單獨的位于一個任務堆疊中,
如何給Activity指定啟動模式
一共有兩種方式
1.通過AndroidMenifest為Avtivity指定啟動模式
android:launchMode="standard"
2.通過Intent中設定標志位來為Activity指定啟動模式
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
兩種方式的區別
在優先級上第二種方式高于第一種方式,當兩種同時存在是,以第二種為準,
第二種方式無法為Activity指定singleInstance模式,而第一種方式無法直接為Activity設定FLAG_ACTTIVITY_CLEAR_TOP標識,
IntentFilter的匹配規則
顯示呼叫需要Intent能夠匹配目標組件的IntentFilter中所設定的過濾資訊,如果不匹配將無法啟動目標Activity,
IntentFilter中過濾資訊有action、category、data,為了匹配過濾串列,需要同時匹配過濾串列中的action、category、data資訊,
action匹配規則
Intent中的action存在且必須和過濾規則中的其中一個action相同,Intent中如果沒有指定action,那么匹配失敗,action區分大小寫,
category匹配規則
Intent中的category可以沒有,但是存在時必須能和過濾規則當中的某一個相同,category不區分大小寫,
data匹配規則
data由兩部分組成,mimeType和URI,
mineType指的是媒體型別,比如image/jpeg,audio/mpeg4-generic和video/*等,可以表示圖片、文本、視頻等不同的媒體格式,
URI:包含比較多的內容
Scheme:URI的模式,比如http、file、content等,如果URI沒有指定scheme,那么整個URI的其他引數無效,意味著URI也是無效的,
Host:URI的主機名,比如www.baidu.com,如果host未指定,那么整個URI的其他引數無效,意味著URI也是無效的,
Port:URI的埠號,比如80,僅當URI中的scheme和host都指定時port引數才是有意義的,
Path:表示完整路徑
pathPattern:表示完整路徑,但是路徑里面可以包含通配符
pathPrefix:表示路徑的前綴資訊
Intent中的data存在且必須和過濾規則中的其中一個data相同
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/290304.html
標籤:其他
上一篇:Android長時間后臺運行,記憶體被回收再次打開導致APP崩潰(APP在后臺被系統回收后,如何重新啟動?)
下一篇:Python群發短信
