1. 程式人生 > >Android Studio 單刷《第一行程式碼》系列 04 —— Activity 相關

Android Studio 單刷《第一行程式碼》系列 04 —— Activity 相關

前情提要(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)

儘管我試圖在本文中儘量完整的進行描述,但受限於篇幅和我的個人水平,本文難免有所遺漏,歡迎在評論中指出。
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!

關於作者(About Me)

addict
原文連結:http://www.cnblogs.com/DebugLife/p/4351970.html