歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android Training - 停止和重啟一個Activity

Android Training - 停止和重啟一個Activity

日期:2017/3/1 10:13:44   编辑:Linux編程

為了確保你的用戶能感覺到程序一直是活著的,並且沒有丟失他們的使用進度,合理的停止和啟動你的activity將顯得尤為重要。這裡有一些場景是需要你的activity停止和重啟的:

用戶在你的程序中從“正在運行程序窗口”選擇切換到其他程序。那麼你的程序的activity就會被停止。如果用戶從“主屏幕圖標”或者“正在運行程序窗口”中選擇了你的程序,那麼這個activity會被重啟。

用戶在你的程序中執行一個行為啟動了一個新的activity。當前activity就會被停止,第二個activity被創建。當用戶點擊Back按鈕時,第一activity被重啟。

當用戶正在使用你的程序時接了一個電話。

Activity提供兩個方法onStop()和onRestart()讓你在停止和重啟時做一些特定操作。和paused狀態不一樣的是,stopped狀態保證了UI界面是不可見的,用戶的焦點完全是在另外一個activity中(或者另外一個單獨的程序中)。

提示:因為系統在stopped狀態中會保存你activity實例在內存中,所以你可能不需要實現onStop()和onRestart()方法(甚至是onStart())。對大多數activity來說都是比較簡單的,activity能夠很好的停止和重啟,你只需要使用onPause()暫停進行中的動作和釋放系統資源。

圖解:當你用戶離開你的activity,系統調用onStop()停止activity(1)。如果從stopped狀態返回activity,系統調用onRestart()(2),然後快速的執行onStart()(3)和onResume()(4)。注意,不管是什麼場景導致activity的停止,系統都是先調用onPause()然後再調用onStop()。

停止你的Activity

當activity接收一個onStop()函數調用時,activity是不可見的,而且釋放幾乎所有不需要的資源。一旦activity被停止,系統在恢復系統內存時可能會銷毀activity實例。在極少情況下,系統會直接殺掉你的程序進程而不調用activity的onDestroy()函數,所以在onStop()方法中釋放資源,防止內存洩露是很重要的。

雖然onPause()在onStop()前被調用,不過你應該使用onStop()執行更大、更多CPU密集的關閉操作。比如寫入信息到數據庫。

比如,這是保存筆記草稿到永久存儲器在onStop()中的實現:

  1. @Override
  2. protected void onStop() {
  3. super.onStop(); // Always call the superclass method first
  4. // 保存當前筆記草稿,確保不丟失工作進度。
  5. ContentValues values = new ContentValues();
  6. values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());
  7. values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());
  8. getContentResolver().update(
  9. mUri, // The URI for the note to update.
  10. values, // The map of column names and new values to apply to them.
  11. null, // No SELECT criteria are used.
  12. null // No WHERE columns are used.
  13. );
  14. }

當activity被停止後,activity對象被保持在內存中,等待被呼叫恢復到Resumed狀態,當恢復時你不需要重新創建activity和初始化組件。系統會保持每個View的當前狀態,所以當用戶輸入內容到EditText時,內容會被自動保存,你不需要手動保存和恢復它。

Copyright © Linux教程網 All Rights Reserved