最近的應(yīng)用程序屏幕(也稱為概覽屏幕、最近的任務(wù)列表或最近使用的應(yīng)用程序)是一個系統(tǒng)級界面,列出了最近訪問的任務(wù)和任務(wù)。用戶可以瀏覽列表并選擇要恢復(fù)的任務(wù),或者輕掃以從列表中刪除任務(wù)。5.0(API level 2引入的模型1),即如果同一個實例的多個實例包含不同的文檔,它們可能會在最近的應(yīng)用程序屏幕中顯示為任務(wù)。例如說,幾個文檔在Drive 可能每個都有一個任務(wù)。每個文檔都會在最近的應(yīng)用程序屏幕中顯示為一個任務(wù)。
圖 1. 最近的應(yīng)用程序屏幕顯示了三個 Drive 文檔,每個文檔表示為一個單獨的任務(wù)。
另一個常見示例是用戶在使用瀏覽器時點擊共享 > Gmail。將出現(xiàn) Gmail 應(yīng)用的撰寫屏幕。此時點擊“最近使用的應(yīng)用程序”按鈕將顯示,Gmail 將作為單獨的任務(wù)運行。在早期版本中,所有內(nèi)容都顯示為單個任務(wù),因此后退按鈕是唯一的導(dǎo)航方式。圖 2 顯示了最近應(yīng)用程序屏幕在 5.0 以及更高和更低平臺版本上的外觀比較。左圖顯示 5.0 及更高版本的屏幕,右圖顯示早期版本的屏幕。
圖 2. 5.0 及更高版本(左)和 5.0(右)下方最近的應(yīng)用程序屏幕。
通常,您應(yīng)該允許系統(tǒng)定義您的任務(wù)以及它們在最近的應(yīng)用程序屏幕中的表示方式,并且您不需要修改此行為。但是,您的應(yīng)用程序可以確定它在“最近使用的應(yīng)用程序”屏幕中的顯示方式和時間。您可以使用 . 類來管理任務(wù)并使用類的標(biāo)簽來指定何時從最近的應(yīng)用程序屏幕中添加或刪除。此外,您可以使用屬性來設(shè)置清單中的行為。
將任務(wù)添加到最近的應(yīng)用程序屏幕
使用類標(biāo)簽添加任務(wù)可以讓您更好地控制文檔在“最近使用的應(yīng)用程序”屏幕中打開或重新打開的方式和時間。使用屬性時ipad還原主屏幕布局會刪除下載的軟件嗎,您可以選擇始終在新任務(wù)中打開文檔或重復(fù)使用文檔的現(xiàn)有任務(wù)。
使用標(biāo)簽添加任務(wù)
創(chuàng)建新文檔時,您可以調(diào)用該方法并將其傳遞給啟動該文檔的那個。要插入一個邏輯斷點,以便系統(tǒng)在“最近的應(yīng)用程序”屏幕中將您視為新任務(wù),請將標(biāo)簽傳遞給啟動它的方法。
注意:該標(biāo)簽取代了自 5.0(API 級別 21))以來已棄用的標(biāo)簽。
如果在創(chuàng)建新文檔時設(shè)置標(biāo)志,則始終以目標(biāo)為根創(chuàng)建新任務(wù)。此設(shè)置允許在多個任務(wù)中打開同一個文檔。下面的代碼演示了是如何做到這一點的:
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++) }
爪哇
ity.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; } }
注意:使用標(biāo)簽啟動必須在清單中設(shè)置 :="" 屬性值(默認(rèn))。
當(dāng) 啟動一個新任務(wù)時,系統(tǒng)會搜索現(xiàn)有任務(wù)以查看任務(wù)的組件名稱和數(shù)據(jù)是否與該任務(wù)匹配。如果未找到該任務(wù)或包含標(biāo)簽,則會創(chuàng)建一個以此為根的新任務(wù)。如果找到了任務(wù)ipad還原主屏幕布局會刪除下載的軟件嗎,它就會被帶到最前面,新的任務(wù)會被傳遞給。新獲取并在最近的應(yīng)用程序屏幕中創(chuàng)建一個新文檔,如以下示例所示:
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); }
使用屬性添加任務(wù)
您還可以使用清單中的屬性指定始終啟動新任務(wù)。該屬性有四個值,當(dāng)用戶用app打開文檔時,會產(chǎn)生如下效果:
“”
為文檔重用現(xiàn)有任務(wù)。如上所述,這與設(shè)置了標(biāo)志但未設(shè)置的效果相同。
“”
即使文檔是打開的,也會為文檔創(chuàng)建一個新任務(wù)。使用此值與同時設(shè)置和標(biāo)記具有相同的效果。
“沒有”
不會為文檔創(chuàng)建新任務(wù)。默認(rèn)情況下處理最近的應(yīng)用程序屏幕:它顯示應(yīng)用程序的單個任務(wù),該任務(wù)從用戶上次調(diào)用的任何內(nèi)容恢復(fù)。
“絕不”
不會為文檔創(chuàng)建新任務(wù)。設(shè)置此值會覆蓋 和 標(biāo)志的行為(如果在 中設(shè)置了任何一個),并且最近的應(yīng)用程序屏幕會顯示應(yīng)用程序的單個任務(wù),該任務(wù)從用戶上次調(diào)用的任何內(nèi)容中恢復(fù)。
注意:如果值不是none和never,則必須用=""定義。如果未指定此屬性,則使用 =“none”。
刪除任務(wù)
默認(rèn)情況下,相關(guān)任務(wù)完成后,文檔任務(wù)會自動從最近的應(yīng)用程序屏幕中刪除。您可以使用 .、標(biāo)簽或?qū)傩詠砀采w此行為。
將該屬性設(shè)置為 true 以始終從最近的應(yīng)用程序屏幕中完全排除任務(wù)。
將該屬性設(shè)置為整數(shù)以設(shè)置您的應(yīng)用程序可以在最近的應(yīng)用程序屏幕中包含的最大任務(wù)數(shù)。默認(rèn)值為 16。一旦達(dá)到最大任務(wù)數(shù),最早使用的任務(wù)將從最近的應(yīng)用程序屏幕中刪除。:最大值為50(內(nèi)存不足的設(shè)備上為25);小于1的值無效。
使用類刪除任務(wù)
對于那些在最近的應(yīng)用程序屏幕中創(chuàng)建新任務(wù)的人,您可以調(diào)用一個方法來指定何時應(yīng)該刪除任務(wù)以及完成與該任務(wù)相關(guān)的所有任務(wù)。
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(); }
注意:使用方法會覆蓋標(biāo)簽的使用,如下所述。
保留已完成的任務(wù)
如果您想在最近的應(yīng)用程序屏幕中保留一個任務(wù),即使它已經(jīng)完成,請將標(biāo)志傳遞給啟動它的方法。
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()) }
爪哇
ity.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; }
要達(dá)到相同的效果,請將屬性設(shè)置為 false。文檔的默認(rèn)值為真,一般的默認(rèn)值為假。使用此屬性可替換上述標(biāo)記。
更多示例代碼
要下載以文檔為中心的應(yīng)用程序的示例應(yīng)用程序,請參閱 ts 示例和示例。