Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Overview Screen -- 概覽界面

Android Overview Screen -- 概覽界面

編輯:關於Android編程

Android Overview Screen – 概覽界面

原文鏈接:http://developer.android.com/guide/components/recents.html{:target=”_blank”}

概覽界面(Overview Screen,通常也被叫做最近屏幕、最近任務列表、最近應用等)是一個系統級的界面,用來展示最近訪問的一些活動(Activities)或者任務(Tasks)。用戶可以通過上下滑動來浏覽這個列表,並且可以選擇一個任務來恢復或者通過左右滑動一個任務來把這個任務從這個概覽界面裡移除。從Android5.0(API等級為21)開始,包含不同文檔Documents)的同一個活動的多個實例可能會作為多個任務出現在概覽界面。例如,Google Drive這個應用會為它打開的每一篇文檔都分配一個“任務”。這樣,每一個文檔都會以一個任務的形式在概覽界面裡顯示。

recentsvcq9s/bP1tTauMXAwL3nw+aho8Tjv8nS1M2ouf08Y29kZT5BY3Rpdml0eU1hbmFnZXIuQXBwVGFzazwvY29kZT7AtLncwO3Izs7xo6zS1Lywzai5/Txjb2RlPkludGVudDwvY29kZT7A4NbQu+62r7XEPGNvZGU+serWvs67PC9jb2RlPqOoPGNvZGU+ZmxhZ3M8L2NvZGU+o6nAtLao0uXSu7j2u+62r8rH1Nq6zsqxsbvM7bzTu/LSxrP9s/a4xcDAxsHEu7XEo6jV4r7ku7CxvtGn1Py40L71t621xLrcsfDFpKOsxMTOu7rD0MS1xM2s0ae/ydLUsO/DpsH00dS+wNX90rvPwtG9o6zUrc7EyOfPwqO6VGhlIEFjdGl2aXR5TWFuYWdlci5BcHBUYXNrIGNsYXNzIGxldHMgeW91IG1hbmFnZSB0YXNrcywgYW5kIHRoZSBhY3Rpdml0eSBmbGFncyBvZiB0aGUgSW50ZW50IGNsYXNzIGxldCB5b3Ugc3BlY2lmeSB3aGVuIGFuIGFjdGl2aXR5IGlzIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgb3ZlcnZpZXcgc2NyZWVuLqOpoaPNrNH5o6zO0sPHv8nS1MXk1sPH5bWlzsS8/tbQPGNvZGU+PGFjdGl2aXR5PjwvYWN0aXZpdHk+PC9jb2RlPrHqx6m1xMr00NTAtLao0uXJz8r20NDOqqGjPC9wPg0KPGgyIGlkPQ=="adding-tasks-to-the-overview-screen-往概覽屏幕中添加任務">Adding Tasks to the Overview Screen – 往概覽屏幕中添加任務

Intent類的標志位來新增一個任務,可以為一個在概覽界面上的文檔在何時以及如何被打開或重新打開增加更多的控制。而使用標簽時,你可以決定在打開一個文檔時,是使用一個新的任務亦或是重用一個已經存在的任務,而這種清單文件中定義的行為一旦定義則不會改變。

 

Using the Intent flag to add a task – 使用Intent類的標志位來添加一個任務

啟動活動時,你應該把Intent傳給ActivityManager.AppTask類的startActivity()方法,來為你的活動創建一個文檔。如果要創建一個邏輯上的斷點來讓系統把你的活動作為一個新的任務顯示在概覽屏幕上,你應當把FLAG_ACTIVITY_NEW_DOCUMENT標志位傳給用來來啟動這個活動Intent對象的addFlag()方法。

NOTE: FLAG_ACTIVITY_NEW_DOCUMENT標志位已經取代了FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET,後者已經在Android5.0(API等級21)中過期了。

如果你創建一個新文檔時用了FLAG_ACTIVITY_MULTIPLE_TASK標志位,則系統在每次打開這個活動時都會創建一個任務,並把這個活動作為根活動放進去。這種操作允許同樣的文檔在多個任務中打開。下面代碼演示了主活動時如何做的:

DocumentCentricActivity.java

public void createNewDocument(View view) {
      boolean useMultipleTasks = mCheckbox.isChecked();
      final Intent newDocumentIntent = newDocumentIntent();
      if (useMultipleTasks) {
          newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
      }
      startActivity(newDocumentIntent);
  }

  private Intent newDocumentIntent() {
      final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
      newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
      newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, incrementAndGet());
      return newDocumentIntent;
  }

  private static int incrementAndGet() {
      Log.d(TAG, incrementAndGet():  + mDocumentCounter);
      return mDocumentCounter++;
  }
}

NOTE:FLAG_ACTIVITY_NEW_DOCUMENT標志位啟動的活動,它在清單文件中定義的啟動方式必須是默認啟動方式:android:launchMode=standard

當主活動用Intent啟動一個新的活動時,系統會搜索所以存在的任務來找到一二任務,即這個任務的Intent符合當前Intent的組件名和數據。如果沒找到符合的任務,或者這個Intent攜帶了一個FLAG_ACTIVITY_MULTIPLE_TASK標志位,一個新的任務會被創建,而這個即將啟動的活動會作為這個任務的根活動。而如果找到了對應的任務,系統會把這個任務帶回前台,並把新的Intent傳遞給活動的onNewIntent()方法。這個新的活動獲得Intent並在開始概覽屏幕上創建一個新的文檔,如下面的代碼所示:

NewDocumentActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_new_document);
    // TODO something
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this activity
    is reused to create a new document.
     */
}

Using the activity attribute to add a task – 用清單文件中“活動”標簽的屬性來添加一個任務

一個活動可以在清單文件中定義它總是啟動到一個新的任務,即在“活動”標簽中使用屬性:android:documentLaunchMode。當用戶打開一個文檔時,這個參數有四種類型來產生不同的效果:

intoExisting

活動會重用已存在的任務。這個參數類似於Intent中添加了FLAG_ACTIVITY_NEW_DOCUMENT標志位,卻沒有添加FLAG_ACTIVITY_MULTIPLE_TASK,可以參考上面Using the Intent flag to add a task – 使用Intent類的標志位來添加一個任務的描述。

always

活動為這個文檔創建一個新的任務,即使這個文檔已經被打開。這個參數類似於Intent中同時添加了FLAG_ACTIVITY_NEW_DOCUMENTFLAG_ACTIVITY_MULTIPLE_TASK標志位。

none

活動不為這個文檔創建一個新的任務。概覽屏幕以默認方式對待這個活動,級:整個應用會作為一個任務在概覽界面上顯示,而概覽屏幕會在用戶選擇這個應用後喚醒用戶最後使用的活動。

never

活動不為這個文檔創建一個新的任務。不同於none,設置這個參數會覆蓋Intent中的FLAG_ACTIVITY_NEW_DOCUMENTFLAG_ACTIVITY_MULTIPLE_TASK標志位。即使這些標志位被設置,整個應用還是會作為一個任務在概覽界面上顯示,而概覽屏幕會在用戶選擇這個應用後喚醒用戶最後使用的活動。

NOTE: 當參數不選擇nonenever時,活動必須被定義為:launchMode=standard。如果android:documentLaunchMode參數沒有被定義,則none參數會作為默認值。

Removing Tasks – 移除任務

默認情況下,一個帶文檔的任務會在它的活動被結束的時候自動從概覽界面上移除。不過,你可以通過ActivityManager.AppTask類、Intent的標志位或者清單文件中“活動”標簽的屬性來覆蓋這種行為。

你可以設置“活動”標簽的屬性來把一個任務排除在概覽屏幕值外,即android:excludeFromRecents=true

你可以定義你的應用在概覽界面上顯示的任務的數量的最大值,即android:maxRecents屬性。這個屬性是一個整型,默認值是16。當任務的數量到達最大值時,最近最少被使用的任務則會在概覽界面上被移除。這個屬性的最大值時50(低內存設備上是25),最小值為1.

Using the AppTask class to remove tasks – 用AppTask類來移除任務

在創建了一個新任務到概覽屏幕的活動中,你可以定義何時移除這個任務,以及通過調用finishAndRemoveTask()方法來結束所有關聯到這個任務上的活動。

NewDocumentActivity.java

public void onRemoveFromRecents(View view) {
    // The document is no longer needed; remove its task.
    finishAndRemoveTask();
}

NOTE: 使用finishAndRemoveTask()方法會覆蓋下面提到的FLAG_ACTIVITY_RETAIN_IN_RECENTS標志位。

Retaining finished tasks – 保持已經結束的任務

如果你想在活動結束之後,依然在概覽屏幕上顯示這個任務,你可以在啟動這個活動的Intent中添加FLAG_ACTIVITY_RETAIN_IN_RECENTS標志位。

DocumentCentricActivity.java

private Intent newDocumentIntent() {
    final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
    newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
      android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS);
    newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, incrementAndGet());
    return newDocumentIntent;
}

為了達成同樣的效果,可以在清單文件的“活動”標簽下添加android:autoRemoveFromRecents=false。這個屬性對於一般活動來說默認值為false,而對於設置了文檔屬性的活動來說,默認值則為true.而這個參數會覆蓋上面提到的FLAG_ACTIVITY_RETAIN_IN_RECENTS標志位。

 

 

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