原文地址:http://blog.csdn.net/mirkerson/article/details/46385763
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:下載地址