Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Activity的四種加載模式

Activity的四種加載模式

編輯:Android開發實例

  Activity之間的跳轉,或者說加載一個新的Activity,一般對於開發者來說,都不是一個太難的問題。直到後來隨著不斷的深入,才發現原來Activity的加載還分為四種不同加載模式。靈活的使用合適的加載模式,可以避免產生大量的重復的Activity,從而優化性能,減少系統資源消耗。

  四種加載模式具體為:

  standard: 標准模式,一調用startActivity()方法就會產生一個新的實例。
  singleTop: 檢查是否已經存在了一個實例位於Activity Stack的頂部,如果存在就不產生新的實例,反之則調用Activity的newInstance()方法產生一個新實例。
  singleTask: 在一個新的Task中產生這個實例,以後每次調用都會使用此實例,而避免產生新的實例。
  singleInstance: 這個基本上跟singleTask一樣,只是有一點不同,那就是在這個模式下的Activity實例所處的Task中,只能有這一個Activity實例,而不能有其他的實例。

  這些啟動模式可以Android清單文件AndroidManifest.xml中,通過<activity>中的launchMode屬性進行設置,如:

  AndroidManifest.xml

   <activity android:name="MainActivity" android:launchMode="singleTop">
      <intent-filter>
          <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
  </activity>

  Java Code

   Intent intent = new Intent(SrcActivity.this, TargetActivity.class);
   intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
   startActivity(intent);

  四種加載模式的區別如下:

  1.所屬Task的區別:
  一般情況下,,“standard”和”singleTop”兩種加載模式源Activity(即new Intent(arg0,arg1)中的第一個參數)和目標Activity(即new Intent(arg0,arg1)中的第二個參數)在同一個Task內,除非Intent包括了參數FLAG_ACTIVITY_NEW_TASK,如包含了此參數,目標Activity會起動到新的Task裡;
  “singleTask”和“singleInstance” 總是把目標Activity作為一個Task的根元素,他們不會被啟動到一個其他Task裡。

  2.是否允許多個實例的區別:
  standard”和”singleTop”可以允許有多個實例,並且可以位於不同的Task中;
  singleTop要求如果Activity Stack頂部已經有目標Activity實例,則直接講Intent發送給該實例,而不創建新實例。如Activity Stack沒有該實例,則創建新實例;
   “singleTask”和”singleInstance”則只產生一個實例,並且是Task的根元素。“standard”和”singleTop”可以被實例化多次,並且是可以存在於不同的task中;這種實例化時一個task可以包括一個activity的多個實例;“singleTask”和”singleInstance”則限制只生成一個實例,並且是task的根元素。

  3.是否允許其他Activity存在於本Task內的區別:
  “singleInstance”獨占一個Task,其他Activity均不能存在於此Task中,如果它啟動一個新的Activity,不管新的Activity的launch mode如何,新的Activity都將運行於其他Task裡;      
  另外三種模式則可以和其他Activity共存。

  4.是否每次都生成新實例的區別:
  “standar”模式每次都生成一個新的Activity實例;
  “singleTop”的Activity如果在Task的Activity Stack頂部則不生成新實例,直接使用此實例,否則生成一個新實例。
  “singleeInstance”是其所在Task的Activity Stack裡的唯一Activity實例,它每次都會被重用
  “singleTask”如果在Task的Activity Stack的頂部,則接收intent,否則該intent會被丟棄,但仍然會該Task返回前台。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved