Launcher从onCreate函数开始执行,初始化了一些变量,调用mModel.startLoader函数进行读取工做,LauncherModel中定义了一个Loader类,该类负责读取应用程序信息,Loader类建立一个线程LoaderThread来进行数据库的读取操做,LoaderThread中调用loadAndBindWorkspace函数实现了从数据库中读取桌面上应用程序信息,根据快捷方式、组件和文件夹区分开来存储在不一样的列表中,bindWorkspace函数用来将已经存储的列表赋给Launcher对象,同时在Workspace中添加并显示这些视图对象。loadAndBindAllApps函数用来读取全部安装的应用程序信息存入列表中,并将当前列表赋给Launcher中的AllAppsView对象。数据库
2、Launcher中桌面的滚动函数
在桌面上,若是当前的事件是拖动事件,Workspace使用Scroller根据当前的移动的位置及距离进行桌面的移动效果。spa
3、Launcher桌面的点击事件线程
首先判断当前所点击的位置放置的是什么东西,若是是快捷方式则启动当前快捷方式所表明的应用程序,若是是文件夹则显示当前文件夹中存在的内容,若是是全部应用程序列表按钮,则显示全部的应用程列表,其余状况则不进行处理。对象
4、Launcher中的长按事件接口
若是当前长按的是桌面,则弹出添加到桌面对话框,若是有应用程序快捷方式,则根据当前的应用程序快捷方式建立一个DragView对象,当有移动事件时,移动当前的DragView对象,在拖动开始时删除区域会显示出来(DeleteZone设置为可见),当将图标拖入删除区域时,删除区域及DragView对象的背景颜色会改变,在删除区域中松开手能够实现将当前快捷方式从桌面上删除,图标离开删除区域时删除区域及DragView对象的背景会恢复成原来的样子。 在应用程序列表中,长按某个应用程序,则会关闭掉当前的应用程序列表,之后的拖动事件处理和在桌面上拖动应用程序快捷方式的效果是同样的。若是当前长按的是已打开文件夹的名字,则弹出更改文件夹名字对话框(以下图)。事件
5、Launcher中的拖动应用程序图标效果it
Launcher中使用WindowManager进行应用程序快捷方式的拖动。整个Android的窗口机制是基于WindowManager的,这个接口能够添加View到屏幕,也能够从屏幕删除一个View,它面向的一端是屏幕,另外一端是View,直接忽略了Activity或者Dialog等东西,WindowManager是全局的。附件是我写的一个例子。 变量