1. 程式人生 > >Android7.0新特性介紹(一)——多視窗支援

Android7.0新特性介紹(一)——多視窗支援

Android7.0新特性

1 多視窗支援 (在手機和平板中叫分屏模式,最多就倆視窗)

在 Android N 中,Google引入了一個新的而且非常需要的多工處理功能 — 多視窗支援

1.1 進入多視窗模式

  • 啟動App,長按系統導航欄右下角的小方塊(Google官方把這個叫做Overview Button),確保你的App可以進入分屏模式,且尺寸改變後仍然能正常工作。
  • 啟動工作管理員(即單擊右下角的小方塊),然後長按你App的標題欄,將它拖動到螢幕上的高亮區域。確保你的App可以進入分屏模式,且尺寸改變後仍然能正常工作。

1.2 多視窗生命週期

多視窗模式不會更改 Activity 生命週期。

在多視窗模式中,在指定時間只有最近與使用者互動過的 Activity 為活動狀態。 該 Activity 將被視為頂級 Activity。 所有其他 Activity 雖然可見,但均處於暫停狀態。 但是,這些已暫停但可見的 Activity 在系統中享有比不可見 Activity 更高的優先順序。 如果使用者與其中一個暫停的 Activity 互動,該 Activity 將恢復,而之前的頂級 Activity 將暫停。

1.3 針對多視窗模式配置應用

如果您的應用面向 Android N,您可以對應用的 Activity 是否支援多視窗顯示以及顯示方式進行配置。 您可以在清單檔案中設定屬性,以控制大小和佈局。 根 Activity 的屬性設定適用於其任務棧中的所有 Activity。 例如,如果根 Activity 已 android:resizeableActivity 設定為 true,則任務棧中的所有 Activity 都將可以調整大小。

注:如果您使用低於 Android N 版本的 SDK 構建多向應用,則使用者在多視窗模式中使用應用時,系統將強制調整應用大小。 系統將顯示對話方塊,提醒使用者應用可能會發生異常。 系統不會調整定向應用的大小;如果使用者嘗試在多視窗模式下開啟定向應用,應用將全屏顯示。

  • android:resizeableActivity
    在清單的 或 節點中設定該屬性,啟用或禁用多視窗顯示:
    android:resizeableActivity=["true" | "false"]
    如果該屬性設定為 true,Activity 將能以分屏和自由形狀模式啟動。 如果此屬性設定為 false,Activity 將不支援多視窗模式。 如果該值為 false,且使用者嘗試在多視窗模式下啟動 Activity,該 Activity 將全屏顯示。

如果您的應用面向 Android N,但未對該屬性指定值,則該屬性的值預設設為 true。

注:近期(約2016/10/19)我的Nexus6P收到了一個Android7.0的補丁,安裝補丁後,系統會嘗試使任何App進入多視窗模式,無論設定resizeableActivity與否。

1.4 在多視窗模式中執行應用

Android N 添加了新功能,以支援可在多視窗模式中執行的應用。

1.4.1 多視窗模式中被禁用的功能

在裝置處於多視窗模式中時,某些功能會被禁用或忽略,因為這些功能對與其他 Activity 或應用共享裝置螢幕的 Activity 而言沒有意義。 此類功能包括:

  • 某些系統 UI 自定義選項將被禁用;例如,在非全屏模式中,應用無法隱藏狀態列。
  • 系統將忽略對 android:screenOrientation 屬性所作的更改。

1.4.2 多視窗變更通知和查詢

  • boolean Activity.isInMultiWindowMode()
    呼叫該方法以確認Activity是否處於多視窗模式
  • Activity.onMultiWindowModeChanged()
    Activity 進入或退出多視窗模式時系統將呼叫此方法。 在 Activity 進入多視窗模式時,系統向該方法傳遞 true 值,在退出多視窗模式時,則傳遞 false 值。

Fragment也擁有以上方法。

1.5 在多視窗模式種啟動新的Activity

在啟動新 Activity 時,使用者可以提示系統如果可能,應將新 Activity 顯示在當前 Activity 旁邊。 要執行此操作,可使用標誌 Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT。 傳遞此標誌將請求以下行為:

  • 如果裝置處於分屏模式,系統會嘗試在啟動系統的 Activity 旁建立新 Activity,這樣兩個 Activity 將共享螢幕。 系統並不一定能實現此操作,但如果可以,系統將使兩個 Activity 處於相鄰的位置。
  • 如果裝置不處於分屏模式,則該標誌無效。
    注:如果您在任務棧中啟動 Activity,該 Activity 將替換螢幕上的 Activity,並繼承其所有的多視窗屬性。 如果要在多視窗模式中以單獨的視窗啟動新 Activity,則必須在新的任務棧中啟動此 Activity。
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

1.6 支援拖放

使用者可以在兩個 Activity 共享螢幕的同時在這兩個 Activity 之間拖放資料 (在此之前,使用者只能在一個 Activity 內部拖放資料)。 因此,如果您的應用目前不支援拖放功能,您可以在其中新增此功能。 N Preview SDK 擴充套件了 android.view 軟體包,以支援跨應用拖放。 有關以下類和方法的詳細資訊,請參閱 N Preview SDK 參考。
  • View.startDragAndDrop()
    View.startDrag() 的新別名。要啟用跨 Activity 拖放,請傳遞新標誌 View.DRAG_FLAG_GLOBAL。 如需對接收拖放資料的 Activity 授予 URI 許可權,可根據情況傳遞新標誌View.DRAG_FLAG_GLOBAL_URI_READView.DRAG_FLAG_GLOBAL_URI_WRITE

  • View.cancelDragAndDrop()
    只能由拖動發起方呼叫。取消當前正在進行的拖動操作。

  • View.updateDragShadow()
    只能由拖動發起方呼叫。給當前正在進行的拖動操作的拖動設定陰影。

  • android.view.DropPermissions
    令牌物件,負責指定對接收拖放資料的應用授予的許可權。

  • Activity.requestDropPermissions()
    傳遞URI許可權時,需要呼叫這個方法。傳遞的內容儲存在DragEvent中的ClipData裡。返回值為前面的android.view.DropPermissions

1.7 在分屏模式下測試你的App(開發人員和測試人員都需要了解)

無論您是否針對 Android N 更新應用,都應驗證應用在多視窗模式下的行為,以防使用者嘗試在執行 Android N 的裝置上以多視窗模式啟動應用。
- Android N預設支援分屏模式
- 如果您的應用不是使用 N SDK 構建的,則使用者嘗試在多視窗模式中使用應用時,系統將強制調整應用大小,除非應用進行了定向宣告(android:unresizeableActivity=”true”)。

  • 如果您的應用沒有進行定向宣告,則應在執行 Android N 的裝置上啟動應用,並嘗試將應用切換到分屏模式。 驗證並確保在強制調整應用大小時使用者體驗可接受。

  • 如果應用進行了定向宣告,則應嘗試將應用切換到多視窗模式。 驗證並確保執行此操作後,應用仍保持全屏模式。(前文提及,現已失效)

1.7.1 如果支援多視窗模式

如果您的應用是使用 N SDK 構建的,且未禁用多視窗支援,則在分屏模式下驗證以下行為。

  • 在全屏模式下啟動應用,然後通過長按 Overview 按鈕(螢幕右下角的小方框)切換到多視窗模式。 驗證並確保應用正常切換。

  • 直接在多視窗模式中啟動應用,驗證並確保應用正常啟動。 您可以按一下 Overview 按鈕,再長按應用的標題欄,並將其拖動到螢幕上任一突出顯示的區域,從而在多視窗模式中啟動應用。

  • 拖動分界線,在分屏模式中調整應用的大小。 驗證並確保應用正常調整大小且未崩潰,並且必要的 UI 元素仍可見。

  • 完成所有測試後,驗證並確保應用效能可以接受。例如,驗證並確保調整應用大小後更新 UI 沒有長時間的滯後。

1.7.2 測試檢查單

要在多視窗模式中驗證應用效能,請執行以下操作。 除非另有說明,否則請分別在分屏和多視窗模式中執行以下操作。

  • 進入和退出多視窗模式。

  • 從您的應用切換到另一個應用,驗證並確保應用在非活動但可見的狀態下正常執行。 例如,如果您的應用在播放視訊,則驗證並確保在使用者與另一個應用互動時視訊仍在繼續播放。

  • 在分屏模式中,嘗試移動分界線,放大或縮小應用。 分別在左右和上下並排顯示模式中嘗試這些操作。 驗證並確保應用不會崩潰,主要功能可見,且調整操作不需要過長時間。

  • 快速連續執行幾次調整操作。驗證並確保應用不會崩潰或出現記憶體洩漏。 有關檢查應用記憶體使用率的資訊,請參閱檢視記憶體使用率。

  • 在多個不同視窗配置中正常使用應用,驗證並確保應用正常執行。 驗證並確保文字可讀,且 UI 元素大小正常,不影響互動。

1.7.3 如果已禁用多視窗支援

如果您通過設定 android:resizableActivity=”false” 禁用了多視窗支援,則應在執行 Android N 的裝置上啟動應用,並嘗試將應用切換到自由形狀和分屏模式。 驗證並確保執行此操作後,應用仍保持全屏模式。(前文提及,現已失效。不過測試時,仍可嘗試。)