Android 概覽屏幕

来源:http://www.cnblogs.com/eagle816/archive/2017/06/12/6993075.html
-Advertisement-
Play Games

文章照搬過來的:原文地址https://developer.android.google.cn/guide/components/recents.html 概覽屏幕(也稱為最新動態屏幕、最近任務列表或最近使用的應用)是一個系統級別 UI,其中列出了最近訪問過的 Activity 和任務。 用戶可以瀏 ...


文章照搬過來的:原文地址https://developer.android.google.cn/guide/components/recents.html

 

概覽屏幕(也稱為最新動態屏幕、最近任務列表或最近使用的應用)是一個系統級別 UI,其中列出了最近訪問過的 Activity 和任務。 用戶可以瀏覽該列表並選擇要恢復的任務,也可以通過滑動清除任務將其從列表中移除。 對於 Android 5.0 版本(API 級別 21),包含不同文檔的同一 Activity 的多個實例可能會以任務的形式顯示在概覽屏幕中。 例如,Google Drive 可能對多個 Google 文檔中的每個文檔均執行一個任務。 每個文檔均以任務的形式顯示在概覽屏幕中。

圖 1. 顯示了三個 Google Drive 文檔的概覽屏幕,每個文檔分別以一個單獨的任務表示。

通常,您應該允許系統定義任務和 Activity 在概覽屏幕中的顯示方法,並且無需修改此行為。不過,應用可以確定 Activity 在概覽屏幕中的顯示方式和時間。 您可以使用 ActivityManager.AppTask 類來管理任務,使用 Intent 類的 Activity 標誌來指定某 Activity 添加到概覽屏幕或從中移除的時間。 此外,您也可以使用 <activity> 屬性在清單文件中設置該行為。

將任務添加到概覽屏幕


通過使用 Intent 類的標誌添加任務,您可以更好地控制某文檔在概覽屏幕中打開或重新打開的時間和方式。 使用 <activity> 屬性時,您可以選擇始終在新任務中打開文檔,或選擇對文檔重覆使用現有任務。

使用 Intent 標誌添加任務

為 Activity 創建新文檔時,可調用 ActivityManager.AppTask 類的 startActivity() 方法,以向其傳遞啟動 Activity 的 Intent。 要插入邏輯換行符以便系統將 Activity 視為新任務顯示在概覽屏幕中,可在啟動 Activity 的 Intent 的 addFlags() 方法中傳遞 FLAG_ACTIVITY_NEW_DOCUMENT 標誌。

FLAG_ACTIVITY_NEW_DOCUMENT 標誌取代了 FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET 標誌,後者自 Android 5.0(API 級別 21)起已棄用。

如果在創建新文檔時設置 FLAG_ACTIVITY_MULTIPLE_TASK 標誌,則系統始終會以目標 Activity 作為根創建新任務。此設置允許同一文檔在多個任務中打開。以下代碼演示了主 Activity 如何執行此操作:

DocumentCentricActivity.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 = 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()。新 Activity 將獲得 Intent 併在概覽屏幕中創建新文檔,如下例所示:

NewDocumentActivity.java

@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"
該 Activity 會對文檔重覆使用現有任務。這與設置 FLAG_ACTIVITY_MULTIPLE_TASK 標誌、但設置 FLAG_ACTIVITY_NEW_DOCUMENT 標誌所產生的效果相同,如上文的使用 Intent 標誌添加任務中所述。
"always"
該 Activity 為文檔創建新任務,即便文檔已打開也是如此。使用此值與同時設置 FLAG_ACTIVITY_NEW_DOCUMENT 和 FLAG_ACTIVITY_MULTIPLE_TASK標誌所產生的效果相同。
"none”"
該 Activity 不會為文檔創建新任務。概覽屏幕將按其預設方式對待此 Activity:為應用顯示單個任務,該任務將從用戶上次調用的任意 Activity 開始繼續執行。
"never"
該 Activity 不會為文檔創建新任務。設置此值會替代 FLAG_ACTIVITY_NEW_DOCUMENT 和 FLAG_ACTIVITY_MULTIPLE_TASK 標誌的行為(如果在 Intent 中設置了其中一個標誌),並且概覽屏幕將為應用顯示單個任務,該任務將從用戶上次調用的任意 Activity 開始繼續執行。

:對於除 none 和 never 以外的值,必須使用 launchMode="standard" 定義 Activity。如果未指定此屬性,則使用 documentLaunchMode="none"

移除任務


預設情況下,在 Activity 結束後,文檔任務會從概覽屏幕中自動移除。 您可以使用 ActivityManager.AppTask 類、Intent 標誌或 <activity> 屬性替代此行為。

通過將 <activity> 屬性 android:excludeFromRecents 設置為 true,您可以始終將任務從概覽屏幕中完全排除。

您可以通過將 <activity> 屬性 android:maxRecents 設置為整型值,設置應用能夠包括在概覽屏幕中的最大任務數。預設值為 16。達到最大任務數後,最近最少使用的任務將從概覽屏幕中移除。 android:maxRecents 的最大值為 50(記憶體不足的設備上為 25);小於 1 的值無效。

使用 AppTask 類移除任務

在於概覽屏幕創建新任務的 Activity 中,您可以通過調用 finishAndRemoveTask() 方法指定何時移除該任務以及結束所有與之相關的 Activity。

NewDocumentActivity.java

public void onRemoveFromRecents(View view) {
    // The document is no longer needed; remove its task.
    finishAndRemoveTask();
}

:如下所述,使用 finishAndRemoveTask() 方法代替使用 FLAG_ACTIVITY_RETAIN_IN_RECENTS 標記。

保留已完成的任務

若要將任務保留在概覽屏幕中(即使其 Activity 已完成),可在啟動 Activity 的 Intent 的 addFlags() 方法中傳遞 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;
}

要達到同樣的效果,請將 <activity> 屬性 android:autoRemoveFromRecents 設置為 false。文檔 Activity 的預設值為 true,常規 Activity 的預設值為 false。如前所述,使用此屬性替代 FLAG_ACTIVITY_RETAIN_IN_RECENTS 標誌。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 把以上兩個文件放到同一目錄 運行index.html文件就可以看到效果了。 如果出現 : TypeError: Cannot set property '$render' of undefined 說明angular的版本太低,這個版本要求至少在v1.2.30以上. github傳送門:https: ...
  • 本人做前端兩年,感覺沒什麼進步,自己還是太菜了,想通過博客來記錄一下自己學習進度,以便日後自己查看和想學習Vue的朋友參考,大家互相學習,有寫得不對的地方歡迎大家指點,助我成長成大神,哈哈!!! ...
  • (1)全局環境 在全局環境使用this,它指的就是頂層對象window。 (2)構造函數 構造函數中的this,指的是實例對象。 (3)對象的方法 當A對象的方法被賦予B對象,該方法中的this就從指向A對象變成了指向B對象。所以要特別小心,將某個對象的方法賦值給另一個對象,會改變this的指向。 ...
  • 一,工程圖。 二,代碼。 RootViewController.m #import "RootViewController.h" //加入頭文件 #import "UIImageView+WebCache.h" @interface RootViewController () @end @imple ...
  • 先看效果: 我並沒有找到有設置ListView分割線的屬性 下麵是一個比較簡單的實現,如果有同學有更好的實現,歡迎留言,讓我們共同進步。我的敘述不一定准確 實現的方法就是在DataTemplate里包一個Border 1、首先自定義一個UserControl來實現佈局,文件名為ItemView.xa ...
  • 1.插件化 ①插件化技術是Android技術領域的集大成者。基於插件化技術,企業可以隨時發佈新功能、修複線上bug,而不需要重新發版。②本解決方案將提供動態替換、靜態代理兩種成熟的插件化實現方式,企業可以根據自身實際情況,決定在項目中採取哪一種。③在提供插件化框架的同時,還將提供增量更新、伺服器插件 ...
  • CAR_TUNE_VALUE 是用來校準 流過電池上的電流 與 系統偵測到的電流 的一致性, 校準接法 正常接法如下圖, 電池流過的電流等於系統流過的電流, 校準的接法如下圖, 電池一樣需要給電,但是 battery ground 需要和 system ground 接在一起,這個會形成一個迴路, ...
  • 我們知道,在 Objective-C 中可以通過 Category 給一個現有的類添加屬性,但是卻不能添加實例變數,這似乎成為了 Objective-C 的一個明顯短板。然而值得慶幸的是,我們可以通過 Associated Objects 來彌補這一不足。本文將結合 runtime 源碼深入探究 O ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...