Activity的啟動方式和flag詳解

2021-06-20 15:03:51 字數 2051 閱讀 9680

activity的4種狀態:

活動的:當乙個activity在棧頂,它是可視的、有焦點、可接受使用者輸入的。android試圖盡最大可能保持它活動狀態,殺死其它activity來確保當前活動activity有足夠的資源可使用。當另外乙個activity被啟用,這個將會被暫停。

暫停:在很多情況下,你的activity可視但是它沒有焦點,換句話說它被暫停了。有可能原因是乙個透明或者非全屏的activity被啟用。

當被暫停,乙個activity仍會當成活動狀態,只不過是不可以接受使用者輸入。在極特殊的情況下,android將會殺死乙個暫停的activity來為活動的activity提供充足的資源。當乙個activity變為完全隱藏,它將會變成停止。

停止:當乙個activity不是可視的,它「停止」了。這個activity將仍然在記憶體中儲存它所有的狀態和會員資訊。儘管如此,當其它地方需要記憶體時,它將是最有可能被釋放資源的。當乙個activity停止後,乙個很重要的步驟是要儲存資料和當前ui狀態。一旦乙個activity退出或關閉了,它將變為待用狀態。

待用: 在乙個activity被殺死後和被裝在前,它是待用狀態的。待用acitivity被移除activity棧,並且需要在顯示和可用之前重新啟動它。

activity的4種載入模式:

在android的多activity開發中,activity之間的跳轉可能需要有多種方式,有時是普通的生成乙個新例項,有時希望跳轉到原來某個activity例項,而不是生成大量的重複的activity。載入模式便是決定以哪種方式啟動乙個跳轉到原來某個activity例項。

在android裡,有4種activity的啟動模式,分別為:

standard: 標準模式,一呼叫startactivity()方法就會產生乙個新的例項。

singletop: 來了intent, 每次都建立新的例項,僅乙個例外:當棧頂的activity 恰恰就是該activity的例項(即需要建立的例項)時,不再建立新例項。這解決了棧頂復用問題

singletask: 來了intent後,檢查棧中是否存在該activity的例項,如果存在就把intent傳送給它,否則就建立乙個新的該activity的例項,放入乙個新的task棧的棧底。肯定位於乙個task的棧底,而且棧中只能有它乙個該activity例項,但允許其他activity加入該棧。解決了在乙個task中共享乙個activity。

singleinstance: 這個跟singletask基本上是一樣,只有乙個區別:在這個模式下的activity例項所處的task中,只能有這個activity例項,不能有其他的例項。一旦該模式的activity的例項已經存在於某個棧中,任何應用在啟用該activity時都會重用該棧中的例項,解決了多個task共享乙個activity。

這些啟動模式可以在功能清單檔案androidmanifest.xml中進行設定,中的launchmode屬性。

影響載入模式的一些特性:

核心的intent flag有:

flag_activity_new_task 

flag_activity_clear_top 

flag_activity_reset_task_if_needed 

flag_activity_single_top 

核心的特性有: 

taskaffinity 

launchmode 

allowtaskreparenting 

cleartaskonlaunch 

alwaysretaintaskstate 

finishontasklaunch

activity在activity棧(task)中的載入順序是可以控制的,這就需要用到intent flag

intent常用標識:

注意:如果是從broadcastreceiver啟動乙個新的activity,或者是從service往乙個activity跳轉時,不要忘記新增intent的flag為flag_activity_new_task。

activity啟動方式

activity的啟動分為 顯示啟動和隱式啟動 顯示啟動 明確的指定乙個activity進行啟動 隱式啟動 只有合適的activity才可以啟動 什麼是合適?當標籤內的內容與intent的設定相同時 intent.setaction htl intent.addcategory intent.set...

Activity的啟動方式和flag詳解

activity的4種狀態 活動的 當乙個activity在棧頂,它是可視的 有焦點 可接受使用者輸入的。android試圖盡最大可能保持它活動狀態,殺死其它activity來確保當前活動activity有足夠的資源可使用。當另外乙個activity被啟用,這個將會被暫停。暫停 在很多情況下,你的a...

Activity的啟動方式和flag詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!activity的4種狀態 活動的 當乙個activity在棧頂,它是可視的 有焦點 可接受使用者輸入的。android試圖盡最大可能保持它活動狀態,殺死其它activity來確保當前活動activity有足夠的資源可使用。當另外乙個activit...