基於Android 4.4 開發的多視窗系統 開放原始碼

mirkerson發表於2015-06-06

分類: android 6318人閱讀 評論(76) 收藏 舉報

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。

 

更新於20140730-------------------------------------------------------------------------------------------

簡單的介紹multi window開發過程的PPT:下載地址

相關文章