Hi, 這是我基於Android 4.4開發的多視窗系統,還有很多不足,還請多多指教啊,代碼已經全部開源。
視頻地址
源碼地址
Done:
1. APP以視窗化顯示
在 PhoneWindowManager::layoutWindowLw() 中通過packageName過濾,使指定的APP以非全屏尺寸顯示,因為一個APP通常是以一個task為單位,顯示多個activity,因此採用packageName過濾的方法。
2. 多個APP同時處於 onResume 狀態
修改AMS中通知onPause()的地方,指定pkg不通知pause。關於AMS中activity生命週期控制的地方,是以後需要著重最佳化的。
3. 修改Window的touch region
修改InputMonitor::addInputWindowHandleLw(), 使得Window攔截touch event的region只在本視窗範圍內。
4. Touch的window 上移到螢幕頂層
在AMS,WindowSession中新增介面,在ViewRootImpl裡攔截touch event,通過 windowSession通知WMS,和AMS,將Window 和 task 移至頂層。
5. RecentActivity 啟動到 APP stack中
由於同stack中task切換時的visibility切換還較好控制,但是如果跨stack切換,控制較為困難,因此將RecentActivity移至APP stack中啟動,這樣呼出RecentActivity,切換APP時,不會出現一些顯示上的bug。
6. 為Window增加titlebar
在PhoneWindow::generateLayout() 中增加titlebar,包括close, minimum, maximum, drag area, resize。
minimum尚未實現,因為還要結合AMS做一些控制activity生命週期的工作。
7. 增加入口APP
提供使用者選擇讓哪個APP以視窗化形式啟動,並在ServiceManager中註冊了一個自訂的service,裡面存放了要視窗化顯示的pkgs,然後供framework各處調用。
Next plan:
1. 修正各種bug
bug之多簡直不忍直視了。。。關鍵還是對源碼很多地方不夠熟悉,因此總是頭痛醫頭,腳痛醫教。
2. 熟悉AMS控制流程程
設計合理的多視窗activity生命週期,完成 minimum。