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

來源:互聯網
上載者:User

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。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.