activity 面試總結

activity生命週期

面試題總結

  • 問onStart(),與onResume()有什麼區別?

onStart()是activity界面被顯示出來的時候執行的,用戶可見,包括有一個activity在他上面,但沒有將它完全覆蓋,用戶可以看到部分activity但不能與它交互

onResume()是當該activity與用戶能進行交互時被執行,用戶可以獲得activity的焦點,能夠與用戶交互。

onStart()通常就是onStop()(也就是用戶按下了home鍵,activity變爲後臺後),之後用戶再切換回這個activity就會調用onRestart()而後調用onStart()

onResume()是onPause()(通常是當前的acitivty被暫停了,比如被另一個透明或者Dialog樣式的Activity覆蓋了),之後dialog取消,activity回到可交互狀態,調用onResume()。

  • 什麼情況下Activity走了onCreat(),而不走onStart()

我們在onCreate()裏面加了super.onStop();或super.onDestroy();,這樣執行到onCreate()函數時,執行流程是這樣的:onCreate -> onStop或onDestroy -> onStart -> onResume。最終還是會執行onStart。而如果加上finish(),則onCreate -> onDestroy,而不會執行onStart。

  • 分別在onCreate / onStart / onResume 裏面調用finish,生命週期怎麼調用

如果Activity在onResume(可見)之前就需要被銷燬時,onPause(不可見)也也不會執行;
如果Activity在onStart(開始)之前就需要被銷燬時,onStop(停止)也不會執行;

  • 假設項目中有這樣的需求,當指定的 Activity 在用戶可見後才進行廣播的註冊,在用戶不可見後對廣播進行註銷,那應該在哪兩個回調中做這個處理呢?

認真看了上面的解釋的童鞋肯定都比較清楚。問題中強調了「可見」和「不可見」,所以我們只需要注重可見生命週期,在Activity 啓動後,會先調用 onCreat() 方法進行佈局和想關事件的綁定,直到回調 onStart() 方法後活動纔可見,所以直接回答 onStart()onStop() 即可。

  • 如果有一些數據在 Activity 跳轉時(或者離開時)要保存到數據庫,那麼你認爲是在 onPause() 好還是在 onStop() 執行這個操作好呢?

熟悉 Activity 的生命週期的我們都知道,onPause() 相比 onStop() 更容易觸發。而「數據」就是 APP 甚至互聯網產品的根,我們雖然絕大多數情況下都會遵從 onPause() =onStop() 的原則,但我們實在難以保證每次運行都能正常運行到 onStop() 方法,比如還沒運行到 onStop() 系統就被回收了。

值得注意的是,這個操作要儘量地快,不然肯定會影響到下一個 Activity 的生命週期的。

  • Activity A 啓動了 Activity B,簡單說下它們分別的生命週期的變化。
  • Activity A 通過 Intent 顯示啓動了 Activity B,當 B 處於可見狀態後,A 是否一定會調用 onStop()?

這兩個問題其實考察的點基本一致,大概就想考察面試者是否認爲只要最上層棧頂的 Activity B 處於可見狀態,那下面一層的 Activity A 就一定會調用 onStop() 方法。

如果直接照第四個問題的方式提問你,你就算認定一定會調用,但你也會被問的懷疑人生。但由於你覺得一定調用 onStop() 方法,並且你也找不到不調用的情況,所以你很耿直的回答了一定會調用。

實際上卻並不是一定會調用,我們上面也說了,Activity 調用 onStop() 的時期是該 Activity 處於完全不可見狀態,所以我們只需要想辦法舉出還可見的狀態就好了。
我們假設彈出一個對話框形式的 Activity B,甚至就算彈出一個正常的 Activity B,把 B 的頁面設置較低的透明度,實際上是一樣的效果,不信你去打印日誌試試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章