App手動殺死後重新開啟App恢復殺死前的頁面

2021-08-17 03:34:23 字數 2669 閱讀 3111

1.功能思路

恢復關閉前的頁面,是要恢復最後乙個activity的資訊,還是恢復整個activity棧的資訊,經需求方要求是恢復所有開啟的頁面,也就是說恢復整個activity棧。

2.實現過程

既然是要恢復,也就需要儲存activity棧資訊到本地。但是這裡有個問題,即使儲存了activity棧資訊,怎麼去恢復整個activity棧呢?直接將activity棧恢復什麼的我是沒有找到方法。我們開啟activity是通過intent開啟的,於是退而求其次,儲存intent佇列。

然後startactivity跟startactivityforresult怎麼區分呢?

將requestcode資訊儲存進intent中,後面通過intent開啟activity時,判斷該值就可以區分了

都要將當前的intent集合儲存到本地

儲存到本地的方式有很多種,因為我們要儲存的是物件,所以我採用物件流的方式儲存到檔案中

大家都看到那個exception資訊了吧,intent無法直接通過物件流儲存到本地中。於是我定義了乙個用來儲存intent資訊的bean類

在baseactivity中的儲存intent操作,將intent的資料遷移至cacheintent中

然後再用物件流儲存到本地檔案中就沒問題了。

接下來說一下開啟過程,因為歡迎頁,及mainactivity是不需要快取的,所以我選擇在mainactivity來初始化快取的intent列表及開啟activity。

在mainactivity呼叫初始化

將快取在檔案中的資料取出

在mainactivity的oncreate()最後,開始開啟activity

每個activity開啟時,去獲取快取集合的第乙個intent,開啟後刪除在該集合裡的物件。

private void 

opencacheintent()

}map, object> map = cacheintent.getbundle();

if (map != null) else if (o instanceof short) else if (o instanceof character) else if (o instanceof integer) else if (o instanceof boolean) else if (o instanceof float) else if (o instanceof long) else if (o instanceof byte) else if (o instanceof short) else if (o instanceof char) else if (o instanceof int) else if (o instanceof float) else if (o instanceof long) else if (o instanceof charsequence) else if (o instanceof charsequence) else if (o instanceof parcelable) else if (o instanceof parcelable) else if (o instanceof serializable) }}

if (cacheintent.getrequestcode() > 0) else

} } catch (exception e)

}

歡迎頁及mainactivity不做快取操作,判斷一下

class extends baseactivity> aclass = getclass();

if (!aclass.getname().equals("包名.splashactivity") &&

!aclass.getname().equals("包名.guideactivity"))

歡迎頁不做開啟操作,跟上面相同,判斷一下classname就可以了。

最後,如果出現未處理的異常時

class crashhandler implements thread.uncaughtexceptionhandler

@override

public void

uncaughtexception(thread thread, throwable ex)

手動殺本馬之旅

對於病毒和木馬的態度,我一直很大度,總是本著蝨子多了不咬債多了不秋的想法。但前些時讓乙個未知木馬確實刺激了一把,好在終於算是搞定了。通常都是用卡巴或360快速查毒,一次用了個冷門的木馬查殺工具,發現了乙個木馬。在windows system32 rmpti75.dll,但總是殺不掉,因為有程序在使用...

如何殺掉linux執行緒,強殺,批量殺

我們使用linux時遇到埠占用,在了解占用程式影響不大的情況下,會通過netstat命令找到占用埠的程序,直接kill掉 查詢埠占用命令 可以看到,程序id為20902的程序占用了80埠 我們可以選擇使用命令 kill pid 殺掉程序 kill 20902或者使用kill 9 pid 強殺程序 k...

Android應用被淺殺和深殺

ontaskremoved 方法在當使用者移除應用的乙個task棧時被呼叫。也就是當使用者在最近任務介面把該應用的乙個task劃掉時,或者在最近任務介面進行清理時。這兩種情況下ontaskremoved 都會被呼叫,但在大多android機型上,這兩種情況有所不同 第一種情況即應用被淺殺 使用者只劃...