基於Android 4.4 開發的多窗口系統 開放源碼

原文地址: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:下載地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章