2020年2月7日 星期五

【Android開發】如何知道APP已經關閉縮到背景?何時又被呼叫回來?

(怎麼會出現技術性文章?原因過陣子再解釋。)

標題的問題在大多數有點經驗的開發者耳中聽起來會覺得很基礎很單純,但有些人可能會知道:這問題一點都不基礎不單純。

因為在Android中,APP是以「Activity」為使用者行為的管理單位。

每一次使用一個功能,就稱為「開啟一個Activity」。例如點開選單上的一個項目看項目的「內容頁面」,這個「內容頁面」可能就是一個Activity。

會說「可能」,因為後來的新增功能中有提供了不用Activity也能開啟內容頁面的方法。但即使有新功能,「開啟一個Activity」還是所有Android開發的基礎。


「知道APP縮到背景、再叫回來,」這件事情的困難與複雜在「使用者從Activity A/功能A進入Activity B/功能B」時,對Activity A來說,這時會視同進入背景。

也就是說...對Activity A來說,它很難真的知道「自己只是因為下一個Activity被呼叫所以先撤略性縮到背景」還是「自己真的被縮到背景」。


也許Activity A正在使用某個Thread在背景中執行一件工作,總要有個Activity在前景接收執行結果...如果搞不清或搞錯了現在APP是縮到背景或只有Activity A縮到背景,這時候會發生一些災難.......

例如:程式要求Thread更新畫面,但系統認為這是個致命錯誤,因為沒有Activity可以更新畫面。

例如:程式把Thread執行結果丟到Queu緩衝區,等下一個、任何一個Activity被呼叫後來檢查執行結果...但下一個Activity早就被呼叫、已經過了檢查點,所以執行結果就一直被遺忘在Queu緩衝區中........


很難啊!

真的沒有什麼是絕對正確完美的解答。

沒有留言: