在Android中,通常我們都會(huì)設(shè)置一個(gè)通知欄點(diǎn)擊后的跳轉(zhuǎn)目的頁(yè)面喝噪,通過(guò)Intent的方式。那如果有一個(gè)需求是如果應(yīng)用在后臺(tái)指么,不再跳轉(zhuǎn)到目的頁(yè)面酝惧,只是恢復(fù)用戶在后臺(tái)的當(dāng)前頁(yè)面,怎么做伯诬?
Stack棧
我們可以通過(guò)棧的方式來(lái)實(shí)現(xiàn)晚唇,思路就是將用戶的操作行為中的每一個(gè)activity做入棧和出棧處理,我們知道棧是先入后出的規(guī)則盗似,Activity本身在系統(tǒng)中也是通過(guò)棧來(lái)管理哩陕,這樣我們就能在通知到來(lái)的時(shí)候,設(shè)置通知跳轉(zhuǎn)的目標(biāo)為棧頂?shù)腁ctivity赫舒,就能做到恢復(fù)用戶之前后臺(tái)最后操作頁(yè)面Activity悍及。
// 自定義一個(gè)父類繼承AppCompateActivity,每一個(gè)Activity都繼承該父類
private static final Stack<Activity> sActivities = new Stack<>();
// 在onCreate中將當(dāng)前Activity入棧
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
sActivities.push(this);
}
// 在onDestroy中將當(dāng)前Activity出棧
@Override
protected void onDestroy() {
super.onDestroy();
sActivities.remove(this);
}
深入實(shí)踐
如果用戶強(qiáng)制退出了App,比如App崩潰了接癌,那我們?nèi)绻胱層脩粝麓未蜷_(kāi)App的時(shí)候繼續(xù)瀏覽這個(gè)頁(yè)面心赶,該怎么辦?
想到了嗎缺猛?其實(shí)也能用這種方式缨叫,將用戶行為存儲(chǔ)到數(shù)據(jù)庫(kù)椭符,即更新存儲(chǔ)棧頂?shù)腁ctivity,下次打開(kāi)app如果有值并且非主頁(yè)耻姥,那就跳轉(zhuǎn)到存儲(chǔ)的棧頂Activity销钝。完美實(shí)現(xiàn)。