關於Activity的onNewIntent方法

2021-07-25 20:18:49 字數 2272 閱讀 8042

onnewintent方法想必大家都知道,是和activity的啟動模式結合起來使用的,可以這個方法具體什麼情況下被呼叫,如何使用你清楚了嗎?今天就來一**竟,掃清疑惑。

實驗一

我們定義兩個activity,homeactivity和secondactivity,然後分別在兩個activity定義兩個按鈕,homeactivity中的按鈕用來啟動secondactivity,而secondactivity中的按鈕用來啟動自己。並且在secondactivity列印對應的生命週期方法,**如下

public

class

homeactivity

extends

activity

public

void

click(view view)

}

ublic class secondactivity extends activity 

@override

protected

void

onstart()

@override

protected

void

onresume()

@override

protected

void

onnewintent(intent intent)

public

void

click(view view)

}

首先我們不指定secondactivity的啟動模式,也就是預設的正常啟動,我們在homeactivity中啟動它,然後自己又啟動自己

可以看到,每次啟動secondactivity,都會重新建立例項,走新的生命週期方法。

實驗二

我們把secondactivity的啟動模式設定為singletop,首先解釋一下singletop的含義,如果當前棧頂存在該activity,則此activity不會被重建,啟動該activity時會呼叫onnewintent方法,否則會重建該activity,然後放到棧頂。

可以看到,當我們設定secondactivity的啟動模式為singletop的時候,因為此時它在棧頂,我們再次去啟動它,不會走oncreate和onstart,只會呼叫onnewintent和onresume方法。

實驗三

我們把secondactivity的啟動模式設定為singletask,然後在secondactivity中啟動乙個新的thirdactivity,最後在thirdactivity又啟動secondactivity,我們看看在這種情況下的執行。

最後我們把secondactivity的啟動模式設定為singleinstance,經過測試,結果和singletask一樣。

前提:activitya已經啟動過,處於當前應用的activity堆疊中;

當activitya的launchmode為singletop時,如果activitya在棧頂,且現在要再啟動activitya,這時會呼叫onnewintent()方法

當activitya的launchmode為singleinstance,singletask時,如果已經activitya已經在堆疊中,那麼此時會呼叫onnewintent()方法

當activitya的launchmode為standard時,由於每次啟動activitya都是啟動新的例項,和原來啟動的沒關係,所以不會呼叫原來activitya的onnewintent方法

接下來我們總結一下啟動模式的應用場景:

singletask:一般在我們應用的主頁(homeactivity)中指定這個啟動模式,假如我們的應用跳到了其他頁面,在返回主頁面,如果不指定啟動模式,在返回的過程中就會產生多個例項,

singletop:適合接收通知啟動的內容顯示頁面。例如,某個新聞客戶端的新聞內容頁面,如果收到10個新聞推送,每次都開啟乙個新聞內容頁面是很煩人的,還有登入頁面,從多個地方可能跳到登入頁面,如果不指定啟動模式,每次都會建立新的例項。

關於 Activity 的跳轉。

最近有看activity 好多不懂,連個簡單的跳轉都不能順利完成,結果當然,定實現個!哈 activity 的跳轉需要乙個觸發,不可能無緣無故的跳轉,可以是最簡單的 button 觸發,也可以其他的 onclicklistener 各種跳轉方法,這就需要大家去發掘,找到了給 cc 乙份啊!跳轉之一,...

關於Activity的記憶

activity是安卓的四大元件之一,service服務 content provide內容提供者 broadcastreceiver廣播接收器 一 建立 先建乙個子類 activity的子類 然後在清單檔案中宣告,在activity標籤屬性中新增android name屬性。需要作為程式入口的存在...

關於Activity布局的優化

1 使用觀察布局工具 hierarchy view 2 使用工具 layoutopt google官方提供的工具類 與adb在同一層目錄下 使用方法見 官方文件 個人總結 1 因為android 布局每多巢狀一層 就會降低cpu的效能 遵守少巢狀原則 做多巢狀5層 3層是最佳的 多用相對布局 減少 ...