Android FrameWork (五)
Launcher
知識(shí)回顧:
ZygoteInit
Systemserver
binder
定義:
Android系統(tǒng)啟動(dòng)后,最后一個(gè)啟動(dòng)的桌面應(yīng)用,一些地圖、短信、電話等應(yīng)用,launcher啟動(dòng)時(shí)由systemserver進(jìn)行啟動(dòng)。
源碼分析:
SystemServer.java
AMS: 開(kāi)啟launcher
ActivityTaskManagerService.java
RootActivityContainer.java:創(chuàng)建一個(gè)意圖,拿到launcher這個(gè)activity
PMS:resolve
總結(jié):
1,在system_service startOtherServices中調(diào)用AMS的systemRedy startHomeOnAllDisplays來(lái)根據(jù)intent(action:action_main,category:intent.categray_home )查找launcher
源碼分析:
Launcher.java:
總結(jié):
1,Launcher是由system_server啟動(dòng)的,在startOtherService 中調(diào)用了AMS的systenReady ActivityTaskManagerIntent.startHomeOnAllDisplays方法查找我們的launcher
2,Launcher中的onCreate函數(shù)來(lái)創(chuàng)建LauncherModel , 調(diào)用startLoader函數(shù),創(chuàng)建LoadTask 去通過(guò)Binder訪問(wèn)到LauncherAppsService的qureyIntentActivitys函數(shù)查詢
3,LoadTask 回調(diào) onUpdateListener 調(diào)用到rebindAdapter對(duì)數(shù)據(jù)進(jìn)行填充和綁定
4,viewHolder中創(chuàng)建設(shè)置點(diǎn)擊事件 ItemClickHandler設(shè)置tag 為 AppInfo,點(diǎn)擊事件中調(diào)用startAppShortCutInfoActivity
拓展知識(shí):
1,開(kāi)機(jī)動(dòng)畫(huà)是怎么進(jìn)行加載和播放的?動(dòng)畫(huà)怎么退出?
bootanim.rc:
bootanimation_main.cpp:
總結(jié):1,bootanimation_main.cpp:中創(chuàng)建BootAnimation并設(shè)置了回調(diào)AudioAnimationCallbacks,BootAnimation繼承Thread,所以會(huì)先執(zhí)行readyToRun,threadLoop。在readyToRun中創(chuàng)建serface設(shè)置紋理,在thread Loop函數(shù)中進(jìn)行資源loadAnimation play Animation在播放的過(guò)程中不停的調(diào)用checkExit 進(jìn)行檢測(cè),檢測(cè)屬性是 service.bootanim.exit 如果退出就會(huì)推出BootAnimation線程
2,在launcher創(chuàng)建完成后執(zhí)行activityThread的handleResumeActivity會(huì)給MessageQueue中插一個(gè)idel,會(huì)調(diào)用都AcitivityTaskManager的activityIdel,執(zhí)行postFinishBooting函數(shù),調(diào)用WMS一個(gè)函數(shù)SystemProperties.set("service.bootanim.exit","1");將service.bootanim.exit 設(shè)置成1就退出了動(dòng)畫(huà)播放。