「近期」畫面 (也稱為「總覽」畫面)、近期工作 清單或最近使用的應用程式畫面是系統層級的 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")); } }