如何使自己 App 的卡片在多任務中像 Chrome 一樣「匯聚」在一起(Android 5.0+)?

Chrome 在 Android 5.0+ 的環境中,會利用 documentLaunchMode 在多任務界面將每一個標籤頁顯示成一張卡片。並且從同一標籤頁打開而來的各個標籤頁會靠得更近,彷彿「匯聚」在一起一般。

而 Google 官方說明中僅提到為 Intent 設置 FLAG_ACTIVITY_NEW_DOCUMENT,或者使用 android:documentLaunchMode="always" 可以新建卡片,並未提及如何將卡片「匯聚」在一起。我嘗試在 StackOver StackOverFlow 提問也沒有得到解答,反編譯了 Chrome,發現也僅設置了 FLAG_ACTIVITY_MULTIPLE_TASK FLAG_ACTIVITY_NEW_DOCUMENT FLAG_ACTIVITY_REORDER_TO_FRONT 三個 FLAG,似乎沒有發現私有 API。


寒假有時間看了一下 Chromium 的源碼,解決了這個問題。

按照如下代碼啟動新的 Activity 即可:

startActivity(newDocumentIntent,
ActivityOptions.makeTaskLaunchBehind().toBundle());

大家可以結合 https://github.com/googlesamples/android-DocumentCentricApps 的源碼自己實驗。

效果圖如下:


要注意一點,這裡用的不是傳統的startActivity()方法,而是ActivityManager.AppTask.startActivity()。

靠攏在一起的卡片理論上應該是隸屬於同一個Task,多個Task之間留出間隔。(猜測,未經驗證)


跳轉的 Intent 添加 addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)


推薦閱讀:

如何評價 Windows 10 詢問用戶是否會推薦 Google Chrome?
使用 Microsoft Edge 瀏覽器是一種怎樣的體驗?

TAG:GoogleChrome | Android開發 | Android | AndroidL |