資源描述:
《android組件設(shè)計(jì)思想》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、Android組件設(shè)計(jì)思想--Everythingiscomponent羅升陽http://weibo.com/shengyangluohttp://blog.csdn.net/luoshengyangAboutMe《老羅的Android之旅》博客作者《Android系統(tǒng)源代碼情景分析》書籍作者博客:http://blog.csdn.net/Luoshengyang微博:http://weibo.com/shengyangluoAgenda組件化背景組件化設(shè)計(jì)組件化支持一個(gè)小實(shí)驗(yàn)Background從PC客戶端應(yīng)用程序說起開發(fā)者角度復(fù)雜,同時(shí)兼顧UI、交互
2、和業(yè)務(wù)邏輯運(yùn)行載體是進(jìn)程進(jìn)程只有一個(gè)入口點(diǎn)—main使用者角度流暢的UI、友好的交互、正確的結(jié)果不知進(jìn)程是何物Backgroundcont.PC客戶端應(yīng)用程序開發(fā)的任務(wù)滿足用戶的需求降低程序復(fù)雜度--組件化Backgroundcont.PC客戶端應(yīng)用程序組件化之后開發(fā)者角度運(yùn)行載體仍然是進(jìn)程進(jìn)程仍然是只有一個(gè)入口點(diǎn)—main使用者角度流暢的UI、友好的交互、正確的結(jié)果不知進(jìn)程是何物Backgroundcont.結(jié)論應(yīng)用程序組件化前后,用戶對(duì)其運(yùn)行載體(進(jìn)程)沒有概念,但是開發(fā)者來說,組件化后的應(yīng)用程序仍然是和進(jìn)程直接關(guān)聯(lián)的,也就是說,進(jìn)程一旦不存在,程序和
3、組件也隨之灰飛煙滅!Backgroundcont.再說移動(dòng)客戶端應(yīng)用程序與PC客戶端應(yīng)用程序一樣,包含UI、交互和業(yè)務(wù)等復(fù)雜邏輯與PC客戶端應(yīng)用程序一樣,用戶的需求是流暢的UI、友好的交互、正確的結(jié)果運(yùn)行在低頻率CPU、小容量內(nèi)存、小面積屏幕設(shè)備上Backgroundcont.設(shè)備特性對(duì)移動(dòng)客戶端應(yīng)用程序的影響低頻率CPU影響程序運(yùn)行速度,尤其是程序啟動(dòng)速度,因?yàn)橛脩魧?duì)程序啟動(dòng)時(shí)間最為敏感小容量內(nèi)存影響同時(shí)運(yùn)行的程序的數(shù)量,而且系統(tǒng)會(huì)在內(nèi)存緊張時(shí)殺進(jìn)程,以便回收內(nèi)存小面積屏幕單窗口操作模式,導(dǎo)致用戶需要頻繁地切換程序或者重新打開程序Backgroundco
4、nt.移動(dòng)客戶端應(yīng)用程序開發(fā)的任務(wù)滿足用戶的需求降低程序復(fù)雜度Backgroundcont.組件化是降低移動(dòng)端應(yīng)用程序復(fù)雜度的不二選擇,但需進(jìn)一步考慮以下兩個(gè)事實(shí):設(shè)備特性的影響系統(tǒng)殺進(jìn)程時(shí),被殺進(jìn)程里面的組件如何處理?程序切換和重新打開時(shí),如可提高程序啟動(dòng)速度?用戶不關(guān)心進(jìn)程是否可以將組件與進(jìn)程進(jìn)行剝離?Design基本思想Everythingiscomponent具體實(shí)現(xiàn)程序由組件組成組件與進(jìn)程剝離組件皆程序入口Designcont.程序由組件組成Activity:前臺(tái)交互Service:后臺(tái)計(jì)算BroadcastReceiver:廣播通信Conten
5、tProvider:數(shù)據(jù)封裝Designcont.組件與進(jìn)程剝離組件關(guān)閉時(shí),進(jìn)程可以繼續(xù)存在提高重新啟動(dòng)時(shí)的速度進(jìn)程關(guān)閉時(shí),組件可以繼續(xù)存在保護(hù)被殺進(jìn)程里面的組件Designcont.組件皆程序入口Activity--onCreateService--onCreateBroadcastReceiver--onReceiveContentProvider--onCreateDesigncont.將組件與進(jìn)程進(jìn)行剝離,使得進(jìn)程對(duì)組件透明,聽起來很好,但是如何解決以下四個(gè)問題?誰來負(fù)責(zé)組件的啟動(dòng)和關(guān)閉?誰來維護(hù)組件的狀態(tài)?誰來管理組件運(yùn)行時(shí)所需要的進(jìn)程?組件之間
6、如何進(jìn)行通信?Infrastruction操作系統(tǒng)級(jí)別的組件化支持ActivityManagerServiceBinderLowMemoryKillerInfrastructioncont.ActivityManagerService啟動(dòng)組件組件啟動(dòng)時(shí),檢查其所要運(yùn)行在的進(jìn)程是否已創(chuàng)建。如果已經(jīng)創(chuàng)建,就直接通知它加載組件。否則,先將該進(jìn)程創(chuàng)建起來,再通知它加載組件。關(guān)閉組件組件關(guān)閉時(shí),其所運(yùn)行在的進(jìn)程無需關(guān)閉,這樣就可以讓組件重新打開時(shí)得到快速啟動(dòng)。維護(hù)組件狀態(tài)維護(hù)組件在運(yùn)行過程的狀態(tài),這樣組件就可以在其所運(yùn)行在的進(jìn)程被回收的情況下仍然繼續(xù)生存。進(jìn)程管理在
7、適當(dāng)?shù)臅r(shí)候主動(dòng)回收空進(jìn)程和后臺(tái)進(jìn)程,以及通知進(jìn)程自己進(jìn)行內(nèi)存回收Infrastructioncont.Binder為組件間通信提供支持進(jìn)程間進(jìn)程內(nèi)高效的IPC機(jī)制進(jìn)程間的組件通信時(shí),通信數(shù)據(jù)只需一次拷貝進(jìn)程內(nèi)的組件通信時(shí),跳過IPC進(jìn)行直接的通信Infrastructioncont.LowMemoryKiller內(nèi)存緊張時(shí)回收進(jìn)程由于組件與進(jìn)程是剝離的,因此進(jìn)程回收不會(huì)影響組件的生命周期從低優(yōu)先級(jí)進(jìn)程開始回收EmptyProcessHiddenProcessPerceptibleProcessVisibleProcessForegroundProcessE
8、xperimentExperimentcont.Experimen