Android Overview Screen -- 概覽介面

來源:互聯網
上載者:User

Android Overview Screen -- 概覽介面
Android Overview Screen – 概覽介面

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

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

vcq9s/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

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_new_document);    // TODO something}@Overrideprotected 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標誌位。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.