Android Studio 單刷《第一行程式碼》系列 04 —— Activity 相關
阿新 • • 發佈:2018-11-26
前情提要(Previously)
本系列將使用 Android Studio 將《第一行程式碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。
PS:其實我就是現學現賣,希望我能堅持刷完。
系列目錄在此:
摘要(Abstract)
Activity 的生命週期、啟動模式、一鍵退出 App。
Activity 的生命週期
Activity 類中定義了七個回撥方法,覆蓋了其生命週期的每一個環節。
- onCreate(),建立時呼叫。
- onStart(),由不可見變為可見時呼叫。
- onResume(),準備好顯示時呼叫。
- onPause(),系統準備去啟動或恢復另一個 Activity 時呼叫。
- onStop(),完全不可見時呼叫。
- onDestroy(),被銷燬之前呼叫。
- onRestart(),重新啟動時呼叫。
以上七個方法中除了 onRestart() 方法,其他都是兩兩相對的,從而又可以將活動分為三種生存期。
- 完整生存期,onCreate() 和 onDestory() 之間。
- 可見生存期,onStart() 和 onStop() 之間。
- 前臺生存期,onResume() 和 onPause() 之間。
加深對 Activity 生命週期的理解,可以看看下面這篇文章。
Activity 的啟動模式
Android 是使用返回棧來管理 Activity 的。Activity 有四種啟動模式,可以在 AndroidManifest.xml 中通過給 activity 標籤增加 launchMode 屬性來選擇啟動模式。
- standard,預設啟動模式,系統不管此 Activity 是否已經在返回棧中存在,每次啟動 Activity 都會建立該 Activity 的一個新的例項。
- singleTop,在啟動 Activity 時,如果發現返回棧的棧頂是該 Activity,則直接使用她,不會再建立新的例項;如果棧頂不是該 Activity,則會建立新的例項。
- singleTask,在啟動 Activity 時,如果找到返回棧中已經存在該 Activity,則直接使用,並將這個 Activity 之上的所有 Activity 全部出棧;如果沒找到,則會建立新的例項。
- singleInstance,會啟用一個新的返回棧來管理這個活動,並保證不再有其他 Activity 的例項進入。
加深對 Activity 啟動模式的理解,可以看看下面這篇文章。
一鍵退出
如果在操作一個 App 時已經進入了好幾個介面,想退出的時候可能需要按好幾次 Back 鍵才行。書中給出了一個很不錯的方案。
- 新建一個 ActivityCollector 類 作為 Activity 管理器,程式碼如下:
public class ActivityCollector { public static List<Activityactivities =new ArrayList<Activity>(); public static void addActivity(Activity activity){ activities.add(activity); } public static void removeActivity(Activity activity){ activities.remove(activity); } public static void finishAll(){ for(Activity activity : activities){ if(!activity.isFinishing()){ activity.finish(); } } } }
- 建立一個 BaseActivity 繼承 Activity,重寫 onCreate()、onDestroy() 方法,程式碼如下:
public class BaseActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); ActivityCollector.addActivity(this); } @Override protected void onDestroy(){ super.onDestroy(); ActivityCollector.removeActivity(this); }
}
-
在所有的 Activity 中繼承 BaseActivity
-
在需要一鍵退出的地方呼叫 ActivityCollector.finishAll()
其它(Miscellaneous)
儘管我試圖在本文中儘量完整的進行描述,但受限於篇幅和我的個人水平,本文難免有所遺漏,歡迎在評論中指出。
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!