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