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

本文謝絕轉載,如需轉載需征得作者本人同意,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM