我們上次學習了百度定位以及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