天天看點

android 為什麼不調用onDestroy方法關閉activity

前天有個同學突然咨詢我,說關閉android的activity,為什麼不直接調用ondestroy方法,而是要調用activity.finish()。

我這裡總結下我的了解:

1.我們知道onDestroy方法是activity的其中一個生命周期,是在activity被finish、系統将之移除出activity的task棧之後,AMS會回調目前activity頁面的一個方法。換言之,也就是說,ondestroy其實是一個回調的函數,我們自己調用是無效的,無法使用這個方法關閉activity。(親測,确實關閉不了)

舉個例子,如A是業務,B是A內建的一個SDK。在A裡面,調用B完成一些功能。那麼通常A在調用B的時候,會實作一個回調函數X,讓B在完成自己操作的情況下,将程式的主動權還給A。這個X在這裡就相當于ondestroy這個函數。顯然,如果A直接調用X,當然也能調用,但是卻沒有什麼意義。

2.另外我們調用finish方法關閉activity的時候,系統是會馬上将該activity移除出棧,但是并不一定會立即執行ondestroy方法,這個要注意。

3.說到ondestroy,想到一個問題,從A頁面跳轉B頁面,即使開發者不主動finish掉A頁面(activity),系統也是有可能會執行ondestroy生命周期的(親測,三星部分機型好像就有這個問題),這個有可能是部分手機的系統自己做了一定的優化。通常情況下,android是會将A頁面保留,不執行ondestroy方法,等到從B頁面傳回的時候,可以展現出來,除非開發者自己finish。但是有部分系統存在這樣的優化,這裡也記錄一下。

————————————————

如果你覺得本人的文章對你有所幫助,客官慢走賞瓶水喝
android 為什麼不調用onDestroy方法關閉activity
android 為什麼不調用onDestroy方法關閉activity
android 為什麼不調用onDestroy方法關閉activity

繼續閱讀