Android Launcher 分析

 

1. Launcher的启动过程

从网络上找了一段关于Launcher的启动过程的文章,作为学习Launcher的背景知识:

Linux kernel启动以后会通过app_main进程来初始化android Runtime Java运行环境,而zygoteAndroid的第一个进程。所有的android的应用以及大部分系统服务都是通过zygote fork出来的子进程(我现在看到的只有native的service manager不是zygote fork出来的)。在system server中启动的若干系统服务中与我们启动进程相关的就是Acitivity Manager
  当systerm server启动好所有服务以后,系统就进入”system ready”状态,这个时候Activity Manager就登场了。Activity Manager光看代码行就知道是一个重量级的服务,它主要管理Activity之间的跳转,以及进程的生命周期。当Activity Manager发现系统已经启动好以后它就会发出一个intent:

通过这个category类型为home的intent,Activity Manager就会通过:
 
启动Home进程了。而这个启动Home进程的过程实际上还是去通过zygote fork出的一个子进程。

因此只要在manifest中具备这样的intent-filter都可以在开机的时候作为Home启动:

多个home之间的switch会在开始的时候有个选择,至于这个选择好像是package manager来实现的,没有仔细研究过。

2.UI结构

通过launcher/Res/Layout-land/launcher.xml分析可以得到主屏幕的UI结构:

 

整个homescreen是一个包含三个child view的FrameLayout(com.android.launcher.DragLayer)。


第一个child就是桌面com.android.launcher.Workspace。这个桌面又包含三个child。每个child就对应一个桌面。这就是你在Android上看到的三个桌面。每个桌面上可以放置下列对象:应用快捷方式,appwidget和folder。


第二个child是一个SlidingDrawer控件,这个控件由两个子控件组成。一个是com.android.launcher.HandleView,就是Android桌面下方的把手,当点击这个把手时,另一个子控件,com.android.launcher.AllAppsGridView就会弹出,这个子控件列出系统中当前安装的所有类型为category.launcher的Activity。


第三个child是com.android.launcher.DeleteZone。当用户在桌面上长按一个widget时,把手位置就会出现一个垃圾桶形状的控件,就是这个控件。

3.应用程序代码分析

Launcher中的AndroidManifest.xml可以看出整个

  • 0
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值