概覽螢幕(最新動態螢幕、最近任務列表)
好吧,這一篇基本上就是Android官方文件抄過來了……文件寫的很清楚簡潔,似乎不會精簡什麼了………
概覽螢幕是一個系統級別的UI,其中列出了最近訪問過的Activity和任務,使用者可以瀏覽該列表並選擇要恢復的任務,也可以通過滑動清除任務將其從列表中移除。通常應該允許系統定義任務和Activity在概覽螢幕中顯示方法,且無需修改,應用可以確定Activity在概覽螢幕中顯示方式和時間,可以使用ActivityManager.AppTask類來管理任務,使用Intent類的Activity標誌來指定某Activity新增到概覽螢幕或從中移除的時間,此外,可以使用<activity>屬性在清單檔案中設定該行為。
將任務新增到概覽螢幕:
使用Intent標誌新增任務:
如果在建立新文件時設定 FLAG_ACTIVITY_MULTIPLE_TASK 標誌,則系統始終會以目標 Activity 作為根建立新任務。此設定允許同一文件在多個任務中開啟。以下程式碼演示了主 Activity
如何執行此操作:
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 = mCheckbox.isChecked();
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++;
}
}注:使用 FLAG_ACTIVITY_NEW_DOCUMENT 標誌啟動的 Activity 必須具有在清單檔案中設定的 android:launchMode="standard" 屬性值(預設)。
當主 Activity 啟動新 Activity 時,系統會搜遍現有任務,看看是否有任務的 Intent 與 Activity 的 Intent 元件名稱和 Intent 資料相匹配。 如果未找到任務或者 Intent 包含 FLAG_ACTIVITY_MULTIPLE_TASK 標誌,則會以該 Activity 作為其根建立新任務。如果找到的話,則會將該任務轉到前臺並將新 Intent 傳遞給 onNewIntent()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_document);
mDocumentCount = getIntent()
.getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0);
mDocumentCounterTextView = (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屬性新增任務:
此外,Activity 還可以在其清單檔案中指定始終通過使用 <activity> 屬性 android:documentLaunchMode 進入新任務。 此屬性有四個值,會在使用者使用該應用開啟文件時產生以下效果:
- "intoExisting"
- "always"
- "none”"
- 該 Activity 不會為文件建立新任務。概覽螢幕將按其預設方式對待此 Activity:為應用顯示單個任務,該任務將從使用者上次呼叫的任意 Activity 開始繼續執行。
- "never"
- 該 Activity 不會為文件建立新任務。設定此值會替代FLAG_ACTIVITY_NEW_DOCUMENT 和 FLAG_ACTIVITY_MULTIPLE_TASK 標誌的行為(如果在 Intent 中設定了其中一個標誌),並且概覽螢幕將為應用顯示單個任務,該任務將從使用者上次呼叫的任意 Activity 開始繼續執行。
注:對於除 none 和 never 以外的值,必須使用 launchMode="standard" 定義 Activity。如果未指定此屬性,則使用 documentLaunchMode="none"。
移除任務: 在於概覽螢幕建立新任務的 Activity 中,您可以通過呼叫 方法指定何時移除該任務以及結束所有與之相關的 Activity。public void onRemoveFromRecents(View view) {
// The document is no longer needed; remove its task.
finishAndRemoveTask();
}
保留已完成的任務:
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;
}
要達到同樣的效果,請將 <activity> 屬性 android:autoRemoveFromRecents 設定為 false。文件
Activity 的預設值為 true,常規 Activity 的預設值為 false。如前所述,使用此屬性替代 FLAG_ACTIVITY_RETAIN_IN_RECENTS 標誌。