編輯:Android開發實例
我們可以重載所有這些方法以在狀態改變時進行合適的工作。所有的activity都必須實現 onCreate() 用以當對象第一次實例化時進行初始化設置。很多activity會實現 onPause()以提交數據變化或准備停止與用戶的交互。 要注意的是,onPause(),onStop(),onDestory()這3個方法是可以被系統直接kill的,當系統內存不足的時候。而平常從一個activity轉向/回到另一個activity時,當新activity是full screen(彈出窗口,例如AlertDialog是不算的)的時候就會call 前一個activity的onPause(),然後call onStop(),而無論onPause或者onStop,都有可能被kill,所以一般在onPause就會執行savedata操作將所有持久性數據(比如用戶的編輯結果)寫入存儲之中。 現在我們來看看兩個activity在同一個進程內的調用情況: 1. 調用當前activity的 onPause() 方法。 2. 接著調用新啟動activity的onCreate()、 onStart()和onResume()方法。 3. 然後,如果啟動的activity不再於屏幕上可見,則調用它的onStop()方法。 以下我使用Logcat記錄下來的Activity調用過程中的方法調用順序: 1. 點擊按鈕去啟動 Activity1,就會看到
- public class Activity extends ApplicationContext {
- protected void onCreate(Bundle savedInstanceState);
- protected void onStart();
- protected void onRestart();
- protected void onResume();
- protected void onPause();
- protected void onStop();
- protected void onDestroy();
- }
這說明一般Activity的啟動順序是onCreate -> onStart -> onResume 2. 點擊back返回鍵後
- 05-08 09:39:48.389: DEBUG/Activity1(313): onCreate Activity 1
- 05-08 09:39:48.399: DEBUG/Activity1(313): onStart Activity 1
- 05-08 09:39:48.399: DEBUG/Activity1(313): onResume Activity 1
退出當前Activity時,onPause -> onStop -> onDestory 3. 再次啟動Activity
- 05-08 09:40:04.129: DEBUG/Activity1(313): onPause Activity 1
- 05-08 09:40:04.628: DEBUG/Activity1(313): onStop Activity 1
- 05-08 09:40:04.659: DEBUG/Activity1(313): onDestory Activity 1
和一般啟動的順序是一樣的 4. 從Activity1啟動Acitivity2
- 05-08 09:40:18.249: DEBUG/Activity1(313): onCreate Activity 1
- 05-08 09:40:18.249: DEBUG/Activity1(313): onStart Activity 1
- 05-08 09:40:18.259: DEBUG/Activity1(313): onResume Activity 1
Activity1.onPause -> Activity2.onCreate -> Activity2.onStart -> Activity2.onResume ->Activity1.onStop 5. 點擊Home鍵回到桌面
- 05-08 09:40:25.477: DEBUG/Activity1(313): onPause Activity 1
- 05-08 09:40:25.687: DEBUG/Activity2(313): onCreate Activity 2
- 05-08 09:40:25.687: DEBUG/Activity2(313): onStart Activity 2
- 05-08 09:40:25.719: DEBUG/Activity2(313): onResume Activity 2
- 05-08 09:40:26.277: DEBUG/Activity1(313): onStop Activity 1
Activity2.onPause - > Activity2.onStop 6. 回到原來的程序
- 05-08 09:40:31.777: DEBUG/Activity2(313): onPause Activity 2
- 05-08 09:40:32.658: DEBUG/Activity2(313): onStop Activity 2
Activity2.onRestart -> Activity2.onStart -> Activity2.onResume 7. 點擊comfirm, setResult(RESULT_OK),Activity2.finish(),返回到Activity1
- 05-08 09:40:50.429: INFO/ActivityManager(58): Starting activity: Intent ...
- 05-08 09:40:50.649: DEBUG/Activity2(313): onRestart Activity 2
- 05-08 09:40:50.649: DEBUG/Activity2(313): onStart Activity 2
- 05-08 09:40:50.769: DEBUG/Activity2(313): onResume Activity 2
Activity2.onPause - > Activity1.onRestart - > Activity1.onStart - > Activity1.onResume - > Activity2.onStop 8. 點擊back返回鍵後
- 05-08 09:41:04.928: DEBUG/Activity2(313): onPause Activity 2
- 05-08 09:41:04.988: DEBUG/Activity1(313): onRestart Activity 1
- 05-08 09:41:04.998: DEBUG/Activity1(313): onStart Activity 1
- 05-08 09:41:04.998: DEBUG/Activity1(313): onResume Activity 1
- 05-08 09:41:05.419: DEBUG/Activity2(313): onStop Activity 2
- 05-08 09:41:05.469: DEBUG/Activity2(313): onDestory Activity 2
Activity1 退出:onPause -> onStop -> onDestory
- 05-08 09:41:51.868: DEBUG/Activity1(313): onPause Activity 1
- 05-08 09:41:52.428: DEBUG/Activity1(313): onStop Activity 1
- 05-08 09:41:52.468: DEBUG/Activity1(313): onDestory Activity 1
保存activity狀態
保存activity狀態,是為了方便用戶重新打開程序時,能夠回到上次離開時的狀態。這裡面涉及到的方法有: protected void onSaveInstanceState (Bundle outState) protected void onRestoreInstanceState (Bundle savedInstanceState) 當一個Activity被kill之前,它可以調用onSaveInstanceState()來保存當前activity的狀態信息,它會將一個以名稱-值對方式記錄了activity動態狀態的Bundle對象傳遞給該方法。當activity再次啟動時,這個Bundle會傳遞給onCreate()方法和隨著onStart()方法調用的onRestoreInstanceState()。這兩個方法的內容一般是把要臨時保存的數據放到Bundle裡面,或者從裡面拿出來。 要注意的是,onSaveInstanceState() 和 onRestoreInstanceState() 並不是生命周期方法。它們並不是總會被調用。比如說,Android會在activity易於被系統銷毀之前調用 onSaveInstanceState(),但用戶動作(比如按下了BACK鍵)造成的銷毀則不調用。在這種情況下,用戶沒打算再次回到這個activity,所以沒有保存狀態的必要。因為onSaveInstanceState()不是總被調用,所以你應該只用它來為activity保存一些臨時的狀態,而不能用來保存持久性數據。而是應該用onPause()來達到這個目的:�在onPause()裡面調用自定義命名的函數saveState(),在saveState裡面保存數據到數據庫。Logcat的使用
1. import android.util.Log; 2. private static final String TAG = "Activity1"; 設置TAG 3. Log.d(TAG, message); log記錄信息 其中Log.v() : VERBOSE Log.d() : DEBUG Log.i() : INFO Log.w() : WARN Log.e() : ERROR 以上log的級別依次升高,Debug信息應當只存在於開發中,INFO、 WARN、ERROR這3種log將出現在發布版本中。 4. 在Eclipse查看Log: 在菜單Window-> Show View選擇other,在彈出的窗口中選擇Android裡面的LogCat,ok,就會看到LogCat窗口,在Filter那裡可以輸入過濾的詞語,一般是輸入TAG的內容,這樣子可以直接看到有關這個TAG的Log。本文出自 “學習Android” 博客,請務必保留此出處http://android.blog.51cto.com/268543/322518
本文實例講述了Android實現模仿UCweb菜單效果的方法。分享給大家供大家參考。具體如下: UCWeb的菜單看起來不錯,自己模仿做一個,思路實現如下: 1、保
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用
第一,這貨速度太快,第二,模仿真機環境,第三,秒殺任何Android模擬器包括真機,不多說上圖,我忒忙! 官網: http://www.genymotion.co