標籤:
我們上次學習了百度定位以及SharedPreferences的使用,不知道大家有沒有注意到我們新加了一個方法:
protected void onStop() { super.onStop(); mLocationClient.stop(); }
這個方法的作用是在介面停止的時候,同時停止百度定位功能。
聯想到我們還有onCreate,那麼這兩個方法是做什麼用的?是什麼原理呢?
這就需要我們來瞭解一下Activity的生命週期。
Activity生命週期
Activity的整個生命週期有七個重要方法,分別是onCreate、onStart、onResume、onPause、onStop、onRestart、onDestroy,而且這七個方法在不同的狀態下會有不同的觸發時機,
1. Activity啟動的時候,會依次執行onCreate、onStart和onResume
2. Activity失去焦點的時候,會依次執行onPause和onStop
3. Activity重新獲得焦點的時候,會依次執行onRestart、onStart和onResume
4. Activity關閉的時候,會依次執行onPause、onStop和onDestroy
舉個例子:
在APP已經啟動的時候,如果按下Back鍵,那麼就是第4種-關閉的情況,會依次執行onPause、onStop和onDestroy,
按下Home鍵,那麼就是第2種-失去焦點的情況,會依次執行onPause和onStop,這個時候如果再次啟動APP,就會是按照第3種-重新獲得焦點的情況,會依次執行onRestart、onStart和onResume。
為了驗證這一點,我們修改一下MainActivity.java,添加以下方法:
@Override protected void onPause() { Log.v( "WeatherAPP", "onPause" ); super.onPause(); } @Override protected void onRestart() { Log.v( "WeatherAPP", "onRestart" ); super.onRestart(); } @Override protected void onResume() { Log.v( "WeatherAPP", "onResume" ); super.onResume(); } @Override protected void onStart() { Log.v( "WeatherAPP", "onStart" ); super.onStart(); } @Override protected void onDestroy() { Log.v( "WeatherAPP", "onDestroy" ); super.onDestroy(); }
並且在onCreate和onStop方法內加入分別加入:
Log.v( "WeatherAPP", "onCreate" );Log.v( "WeatherAPP", "onStop" );
然後運行程式,試著重複以上操作,並且在Logcat View中查看相應的Log。
這裡說一點小技巧,點擊Logcat View左上方的綠色加號,可以添加自訂的日誌過濾器,我這裡就是用了這樣的功能。
在明白了Activity的生命週期後,它們在實際的APP中具體怎麼應用?
那麼,舉一些例子。
1. 如果我們的預報天氣APP需要在使用者每次重新可見的時候都擷取最新天氣,那麼調用擷取天氣相關的代碼就需要放置到onResume方法中
2. 另外一種情況,我們的APP已經在前台可見了,這時候來了電話,就變得不可見了,之後掛了電話,又重新可見了,這個時候通常是不需要重新擷取資料的,那麼調用擷取天氣相關的代碼就需要放置到onStart方法中
3. 最簡單的情況,我們只需要在啟動的時候擷取天氣,那麼就只需要在onCreate方法中執行
所以呢,技術不是問題,一切都需要根據實際的需要來決定我們的程式應該如何?。
以上是簡單介紹了一下Activity的生命週期,大家可以在實踐中慢慢摸索,並且以上介紹的都只是基礎內容,高階一點的內容我們將在之後的學習中慢慢接觸。
在瞭解了生命週期後,是不是要對我們的APP做些修改呢,嗯,就按照第2種情況修改吧。
所要做的只是把下面這段代碼從onCreate方法移到onStart中。
String city = readCity(); if( city != null && city.length() > 0 ) { getWeather( city ); }
看看結果是不是想要的呢。
想必練習到這裡,大家也都累了,理論知識真是惱人,不過確實是我們所必須的,只有經過理論武裝的知識才能發揮出最大作用。
今天就到這裡吧,各位辛苦了。
明天是周末,會有很多的內容,請大家期待!
此系列文章系本人原創,如需轉載,請註明出處 www.liuzhibang.cn
10天學安卓-第七天