「近期」畫面 (也稱為「總覽」畫面)、近期工作 清單或最近使用的應用程式畫面是系統層級的 UI,會列出最近存取過的內容 活動和工作。 使用者可以瀏覽清單,選取所需工作 繼續或將工作滑開,即可從清單中移除工作。
「近期存取」畫面使用以文件為主軸 模型:Android 5.0 (API) 推出 第 21 級),該級別中的多個執行個體 含有不同文件的同一個活動,在 最近的畫面。舉例來說,Google 雲端硬碟會為 有多份 Google 文件每份文件都會在「近期存取」中顯示為一項工作 螢幕:
另一個常見的例子是在使用者用瀏覽器時 分享 >Gmail:系統隨即會顯示 Gmail 應用程式的「撰寫」畫面。輕觸 此時「最近使用」按鈕顯示 Chrome 和 Gmail 目前以個別方式執行 工作:
一般而言,您可以讓系統定義工作和活動的方式 顯示在「最近使用」畫面中。您不需要修改這個程式碼 行為不過,您的應用程式可以判斷活動在 最近的畫面。
ActivityManager.AppTask
敬上 類別可讓您管理工作,以及 Intent
類別可讓您指定 系統會在「最近使用」畫面中新增或移除活動。此外, <activity>
屬性可讓您 資訊清單中的行為
將工作新增至「最近使用」畫面
使用 Intent
類別的旗標執行以下操作: 新增工作 可讓您進一步控管文件的開啟時機和方式 在「最近使用」畫面中重新開啟。當您使用 <activity>
屬性,則可讓您 您可以選擇一律在新工作中開啟文件,也可以重複使用現有工作 為文件定義工作
使用意圖旗標新增工作
為活動建立新文件時,您會呼叫 startActivity()
敬上 方法並傳遞至啟動活動的意圖。如何插入邏輯 中斷,讓系統將活動視為「Recents」中的新任務 畫面,請傳遞 FLAG_ACTIVITY_NEW_DOCUMENT
敬上 addFlags()
的旗標 Intent
方法,後者會啟動 活動。
如果將 FLAG_ACTIVITY_MULTIPLE_TASK
旗標,每次建立新文件時,系統一律會建立新工作,並使用 把目標活動當做根層級。這項設定可允許 同時開啟多項工作下列程式碼示範了 活動會執行以下動作:
Kotlin
fun createNewDocument(view: View) { val newDocumentIntent = newDocumentIntent() if (useMultipleTasks) { newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK) } startActivity(newDocumentIntent) } private fun newDocumentIntent(): Intent = Intent(this, NewDocumentActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS) putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++) }
Java
public void createNewDocument(View view) { final Intent newDocumentIntent = newDocumentIntent(); if (useMultipleTasks) { newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); } startActivity(newDocumentIntent); } private Intent newDocumentIntent() { boolean useMultipleTasks = checkbox.isChecked(); final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class); newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++); return newDocumentIntent; } }
當主要活動啟動新活動時,系統會搜尋 其意圖符合意圖元件名稱 意圖資料。如果找不到任務或內含的意圖 FLAG_ACTIVITY_MULTIPLE_TASK
旗標,就會建立新任務,並將活動做為根任務。
如果系統找到意圖符合意圖元件名稱的任務, 就會把任務帶到前端,並將新意圖傳遞給 onNewIntent()
。 新活動會取得意圖,並在 Recents 上建立新文件 ,如以下範例所示:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_new_document) documentCount = intent .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0) documentCounterTextView = findViewById(R.id.hello_new_document_text_view) setDocumentCounterText(R.string.hello_new_document_counter) } override fun onNewIntent(newIntent: Intent) { super.onNewIntent(newIntent) /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this Activity will be reused. */ setDocumentCounterText(R.string.reusing_document_counter) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_new_document); documentCount = getIntent() .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0); documentCounterTextView = (TextView) findViewById( R.id.hello_new_document_text_view); setDocumentCounterText(R.string.hello_new_document_counter); } @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. */ setDocumentCounterText(R.string.reusing_document_counter); }
利用活動屬性新增任務
活動也可以在資訊清單中指定一律啟動到新的 呼叫 <activity>
屬性 android:documentLaunchMode
。 此屬性有四個值,會在使用者時產生以下效果 使用應用程式開啟文件:
intoExisting
- 這個活動會在文件中重複使用現有的工作。這就等同於
FLAG_ACTIVITY_NEW_DOCUMENT
敬上 標記,而不設定FLAG_ACTIVITY_MULTIPLE_TASK
標記, 使用意圖旗標新增任務區段。 always
- 活動會為文件建立新的任務,即使文件 已經開啟。使用此值就等於同時設定
FLAG_ACTIVITY_NEW_DOCUMENT
和FLAG_ACTIVITY_MULTIPLE_TASK
旗標。 none
- 這個活動不會為文件建立新工作。近期圖片 畫面會將活動視為預設畫面。顯示單一工作 並從使用者上次叫用的任何活動繼續執行。
never
- 這個活動不會為文件建立新工作。設定這個值 會覆寫 「
FLAG_ACTIVITY_NEW_DOCUMENT
」和「FLAG_ACTIVITY_MULTIPLE_TASK
」 旗標如果您已在意圖和「最近使用」畫面 會顯示應用程式的單一任務,而該應用程式會從 上次叫用的使用者 ,瞭解如何調查及移除這項存取權。
移除工作
根據預設,文件工作會自動從「最近使用」畫面結束。 活動結束時。您可以使用 ActivityManager.AppTask
敬上 使用 Intent
旗標或 <activity>
屬性。
你隨時可以在「近期記錄」畫面中設定完全排除工作, <activity>
屬性 android:excludeFromRecents
至 true
。
您可以設定應用程式可納入的任務數量上限 將「最近使用」畫面設為 <activity>
個屬性 將 android:maxRecents
轉換為 整數值。達到任務數量上限時 最近使用過的工作會從「最近使用」畫面消失。預設值為 16。 最大值為 50 (低記憶體裝置上則為 25)。值較低 超過 1 為無效。
使用 AppTask 類別移除工作
在「最近使用」畫面中建立新任務的活動中,您可以 指定移除任務的時間,並完成所有與此工作相關聯的活動 呼叫 finishAndRemoveTask()
敬上 方法:
Kotlin
fun onRemoveFromOverview(view: View) { // It is good pratice to remove a document from the overview stack if not needed anymore. finishAndRemoveTask() }
Java
public void onRemoveFromRecents(View view) { // The document is no longer needed; remove its task. finishAndRemoveTask(); }
保留已完成的工作
如果您想在「最近使用」畫面中保留某項工作 (即使其活動 完成後,請將 FLAG_ACTIVITY_RETAIN_IN_RECENTS
敬上 標記 addFlags()
方法 啟動活動的意圖。
Kotlin
private fun newDocumentIntent() = Intent(this, NewDocumentActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS) putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, getAndIncrement()) }
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, getAndIncrement()); return newDocumentIntent; }
如要達到相同效果,請將 <activity>
屬性 android:autoRemoveFromRecents
。 至 false
。文件活動的預設值是 true
,文件活動的預設值為 false
從事日常活動使用此屬性會覆寫 FLAG_ACTIVITY_RETAIN_IN_RECENTS
標記。
啟用最近使用的網址分享功能 (僅限 Pixel)
在搭載 Android 12 以上版本的 Pixel 裝置上,使用者可以分享連結 直接在「最近使用」畫面中查看最近瀏覽過的網頁內容。旅遊後 使用者只要滑動至「最近使用」畫面,即可找到該應用程式 查看內容的位置,然後輕觸連結按鈕即可複製或分享 網址。
所有應用程式都可藉由提供網頁版 UI 和 覆寫 onProvideAssistContent()
、 如以下範例所示:
Kotlin
class MainActivity : AppCompatActivity() { protected fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } fun onProvideAssistContent(outContent: AssistContent) { super.onProvideAssistContent(outContent) outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage")) } }
Java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onProvideAssistContent(AssistContent outContent) { super.onProvideAssistContent(outContent); outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage")); } }