Launcher3 Folder源码笔记
2016-01-29 21:05
330 查看
整理一下Lancher3 Folder相关的代码笔记,从Folder加载显示的过程中可以更清晰的认识到Launcher3的加载流程。
LauncherModel.java:桌面加载关键类,大部分流程都在其中完成,它的对象mModel在LauncherAppState中的构造方法中初始化。
Launcher.java:Launcher中有LauncherModel对象,通过LauncherModel中的setLauncher方法将LauncherAppState的mModel传递给它,setLauncher方法中调用了mModel.initialize方法,将实现的回调接口对象传递给mModel中mCallbacks,即实现了Callbacks接口的Launcher,用于更新加载过程中的UI界面。Launcher中onCreate()中调用了mModel的startLoader方法,开始加载。
加载由LoaderTask完成。在run方法里面调用loadAndBindWorkspace方法,这个方法分别调用loadWorkspace方法和bindWorkspace方法。
loadWorkspace中调用LauncherAppState.getLauncherProvider().loadDefaultFavoritesIfNecessary(),如果是首次开机,调用getDefaultLayoutParser(),载入默认的Workspace布局。
bindWorkspace方法绑定桌面的图标,widget等元素,这里先绑定当前页的,再绑定其他页的,这一步要将桌面的各种图标添加到WorkSpace,所以要在Android主线程里工作,最终调用Launcher的bindItems方法。Folder绑定时在bindItems方法里通过fromXml方法创建FolderIcon,然后调用workspace.addInScreenFromBind显示到界面。FolderIcon的tag设为FolderInfo,还包含文件夹展开时的界面Folder对象和FolderInfo对象。这样在onClick等操作桌面图标的操作时,可以方便的获取当前点击的Folder的信息并展示相应界面。
随后还调用了bindFolders方法,将全部folder对象给到一个静态HashMap中,这里根据关联的代码判断应该是为了更方便管理操作桌面文件夹。
LauncherModel.java:桌面加载关键类,大部分流程都在其中完成,它的对象mModel在LauncherAppState中的构造方法中初始化。
Launcher.java:Launcher中有LauncherModel对象,通过LauncherModel中的setLauncher方法将LauncherAppState的mModel传递给它,setLauncher方法中调用了mModel.initialize方法,将实现的回调接口对象传递给mModel中mCallbacks,即实现了Callbacks接口的Launcher,用于更新加载过程中的UI界面。Launcher中onCreate()中调用了mModel的startLoader方法,开始加载。
加载由LoaderTask完成。在run方法里面调用loadAndBindWorkspace方法,这个方法分别调用loadWorkspace方法和bindWorkspace方法。
loadWorkspace中调用LauncherAppState.getLauncherProvider().loadDefaultFavoritesIfNecessary(),如果是首次开机,调用getDefaultLayoutParser(),载入默认的Workspace布局。
bindWorkspace方法绑定桌面的图标,widget等元素,这里先绑定当前页的,再绑定其他页的,这一步要将桌面的各种图标添加到WorkSpace,所以要在Android主线程里工作,最终调用Launcher的bindItems方法。Folder绑定时在bindItems方法里通过fromXml方法创建FolderIcon,然后调用workspace.addInScreenFromBind显示到界面。FolderIcon的tag设为FolderInfo,还包含文件夹展开时的界面Folder对象和FolderInfo对象。这样在onClick等操作桌面图标的操作时,可以方便的获取当前点击的Folder的信息并展示相应界面。
随后还调用了bindFolders方法,将全部folder对象给到一个静态HashMap中,这里根据关联的代码判断应该是为了更方便管理操作桌面文件夹。
相关文章推荐
- Myeclipse 新建工作空间 后的几个 配置
- C语言学习笔记 运算符初步介绍
- android Broadcast 生命周期详细分析
- 斜率优化DP(hdu3507)
- [算法]旋转矩阵问题(Spiral Matrix)
- solr5.3.1 集群服务搭建(转)
- css实现屏幕自适应(仿谷歌静态页面)
- PagerHelper-分页类
- pcl 1.6 + vs2013 + openmesh 3.3 配置
- cout<<"a1="<<a<<endl; cout<<"a2="<<-0x80000000<<endl;
- HashMap的实现原理
- 动态规划问题
- HDU2612 find a way
- Ubuntu静态网络配置
- 教研室 ftp 文件服务器使用教程
- iOS开发流程
- About memories in ASIC FPGA
- 前端工具--spritepad
- Android中实现静态的默认安装和卸载应用
- Asp.net Mvc Action重定向总结