`

Android2.1_Launcher学习笔记

阅读更多

文章分类:移动开发

好么,2.0的源码没看几天,2.1的出了。
学习记录一下, 主要是Launcher启动时从数据库读取各种桌面物件信息到最后显示到屏幕桌面上的流程。
之前看2.0的时候,大概能分出来下面四个层次,2。1里面基本一样:
DB--mListInModel--mListInLauncher--ViewChildInCellLayout

I II III IV


扫了下代码,Launcher里面对这些东西有改动的重要是下面几个函数

FunA:  bindAppWidget(LauncherAppWidgetInfo item)
1. workspace add view. -->IV,add
   workspace.requestLayout.
2. mDesktopItems add item.      -->III,add


FunB: bindFolders(HashMap folders)
1. clear . mFolder. -->III,clear
2. mfolder. add -->III,add all

FunC: bindItems(ArrayList shortcuts,int start,itn end)
1. mDesktopItems. add . -->III,add
2. case APP|Short|Folder|LiveFoder|Search
   add in workspace.screen -->IV,add
   workspace.requestLayout.


FunD: completeAddApplication(Context context,Intent,CellLayout.CellInfo)
1. find place ,
2. workspace.dropExternal -->I, fix or add.



FunE: completeAddAppWidget(Intent,CellInfo)
1. create a AppWidgetProviderInfo .from  appWidgetId. -->III, add
2. if didnt find slot : delete it -->III,del
    else add to db. --->I, add
3. mDesktopItems add -->III,add
4. workspace add -->IV,add


FunF: completeAddLivefodler(Intent,CellInfo)
1.add to DB -->I
2.workspace add view -->IV

FunG: completeAddShortcut(Intent,CellInfo)
1.add to DB -->I
2.workspace add view -->IV


FunH: finishBindingItems()
1. every folder .  add to workspace screen . -->IV,add
2. requestLayout.
3. requesetFocus for that opend


FunL: startBinding()
1. workspace.everyCellLayout.removeAllViewsInLayout -->IV.clear



涉及到content的流程:

1 onCreate ,开机 或者重启 

  setupView初始化成员变量,然后由startLoader(isLaunching==true) 函数进行装载。

startLoader这个函数,多数情况下这个boolean参数都是true,也就是说完全重新装载。只有在changeFolderName,也就是改变用户更改folder名字的时候,调用参数是false的状况。
你一定觉得false的时候,系统会很聪明的去做最小的修改吧?嘿嘿,尼采错了。
这个布尔参数只是用来调节后文会提到的那个Thread的权限的,用途是用户开机的时候及早显示免得用户对着黑屏无聊- -b
两种情况做的事情还是一样的:完全的重读重绘,从I->II->III->IV完全走一遍。

他做的事情对应上面层次结构里的I->II->III->IV,
先把内容从ContentProvider读出到自己的成远变量, 然后传递给Launcher,最后传给workspace的CellLayout的每个CellInfo的View,也就是画到屏幕上。

具体来说,分以下几步:
1)创建一个LoaderThread,然后mLoaderThread.start来启动run函数
2)run函数第一步:loadWorkspace . 把数据库中Launcher上的所有app,shortcut,search,folder,livefolder,appwidget.分类读出来,前面2个放在一个arraylist<ItemInfo>,两个folder放入 HashMap<Long, FolderInfo>, appwidget放入第二个arraylist这样分成三类。这里searchWidget是个怪东西,长着widget的个儿,跑app那里去混。
3)run函数第二步:bindWorkspace
   这个函数可以通过Callback这个神气的东西找到launcher,然后向他的workspace发射刚才读出来的两个数组。即包含了所有的数据库中记录的Launcher上的物件。
  主要的,他通过callback调用三个launcher的函数:
Launcher.startBinding (即前面的FunL,把workspace的当前所有的view清空),
Launcher.bindItems(Func,绑定或者说装载App,search,显示到屏幕),
Launcher.bindFolders(FunB,邦好folder相关)  
Launcher.bindAppWidget(FunA,绑定widget,显示到屏幕)
最后,调用Launcher.finishBindingItems() ,上面提到的FunH, 把所有的folder装载上,该显示的folder用4*4个cell显示起来。
细心的看官可能发现,三个bind函数,唯独bindFolders是只在III层操作,不和IV层相关,即不修改workspace的view的,原来是藏在finishBindingItems这个函数来作了。
4) run函数第三步 。 调用loadAllApps和bindAllApps
两个函数一看就不是不山寨我们loadWorkspace和bindWorkspace的嘛。反正就是读出来调用Launcher.bindAllApplications邦起来。
我这么说是为了方便理解,事实上app那块儿mAllAppsList我。。觉得他写的特棒,各种缓存各种区别各种花哨。直接看不懂。

到这里launcher的onCreate就差不多了,机器界面上该显示的也都显示上了。


2 添加

Launcher 上面有两种方式可以添加app快捷方式或者widget,分别是主界面空白处长按或者按下Menu选ADD。
其实点来点去,最后都是到了addItems()这个函数,他弹出一个窗口,让你选想要添加的物件。
这些东西基本会调用一个startActivityForResult
而这些返回的Result回到Launcher的时候,会得到相应的处理
具体的处理在onActivityResult函数里面。

3 删除

删除 没啥好说的



分清楚I,II,III,IV有点用。 想在哪个层次上作修改,对照着来还蛮快。
分享到:
评论

相关推荐

    pymol_launcher-2.1-cp37-cp37m-win_amd64

    pymol_launcher-2.1-cp37-cp37m-win_amd64

    瑞芯微方案平板_android2.1之Launcher修改一.doc

    瑞芯微方案平板_android2.1之Launcher修改一

    VAIO_Launcher Sony笔记本上提取的一款桌面dock,效果华丽

    VAIO_Launcher是一款专为Sony笔记本用户设计的桌面启动器,它以其独特的美观性和高效性赢得了用户的喜爱。这款工具栏不仅提供了便捷的程序启动功能,还为桌面环境增添了时尚和华丽的元素,使得工作与娱乐更加...

    Android8.1_Launcher3.zip

    Android原生Launcher3源码的Android Studio版本,可以用AndroidStudio直接打开并开发。Android平台版本:Android8.1,AndroidStudio版本:3.3.2,注意:编译用到的com.google.protobuf编译信息不能更改,否则编译不过

    android 2.1 launcher源码,可以正常运行

    通过阅读和理解 Android 2.1 Launcher 的源码,开发者可以学习如何创建自己的 Launcher 应用,自定义布局、交互方式和功能,比如添加新的主屏幕页类型、改变图标样式或实现独特的滑动手势。 10. **性能优化** ...

    pymol_launcher-2.6-cp311-cp311-win_amd64.whl.zip

    标题中的“pymol_launcher-2.6-cp311-cp311-win_amd64.whl.zip”是一个包含Python扩展模块的压缩文件,特别提到了“pymol_launcher”,这很可能是用于启动PyMOL的工具。PyMOL是一款广泛使用的分子可视化软件,用于...

    pymol_launcher-2.6-cp311-cp311-win32.whl.zip

    标题 "pymol_launcher-2.6-cp311-cp311-win32.whl.zip" 提供的信息表明这是一个与Python相关的压缩包,其中包含了一个名为 "pymol_launcher-2.6-cp311-cp311-win32.whl" 的文件,它是一个Python的wheel(whl)格式的...

    android_launcher2 & adw_launcher 源码1

    下载于eoeandroid,向原作者致敬 保存仅供学习 由于只能上传20M,故只能分卷了。 源码在eclipse中无错,已配置好 资源列表: 1.android_launcher2源码 2.adw_launcher 源码 3.class.jar

    AnderWeb-android-packages-apps-Launcher-4458ee4

    android studio期末作业AnderWeb-android_packages_apps_Launcher-4458ee4AnderWeb-android_packages_apps_Launcher-4458ee4AnderWeb-android_packages_apps_Launcher-4458ee4AnderWeb-android_packages_apps_...

    rk_launcher模拟苹果dock

    "rk_launcher模拟苹果dock"是一款专为用户打造的桌面插件,旨在为非苹果设备提供类似苹果MacOS系统中的Dock栏体验。这款小巧且美观的工具,能够让你的Windows或其他非苹果操作系统拥有苹果风格的底部任务栏,提升...

    android_launcher2 & adw_launcher 源码2

    下载于eoeandroid,向原作者致敬 保存仅供学习 由于只能上传20M,故只能分卷了。 源码在eclipse中无错,已配置好 资源列表: 1.android_launcher2源码 2.adw_launcher 源码 3.class.jar

    android_launcher2 & adw_launcher 源码3

    下载于eoeandroid,向原作者致敬 保存仅供学习 由于只能上传20M,故只能分卷了。 源码在eclipse中无错,已配置好 资源列表: 1.android_launcher2源码 2.adw_launcher 源码 3.class.jar

    android_launcher2 & adw_launcher 源码4

    下载于eoeandroid,向原作者致敬 保存仅供学习 由于只能上传20M,故只能分卷了。 源码在eclipse中无错,已配置好 资源列表: 1.android_launcher2源码 2.adw_launcher 源码 3.class.jar

    AnderWeb-android-packages-apps-Launcher-4458ee4.zip

    AnderWeb-android_packages_apps_Launcher-4458ee4.zip AnderWeb-android_packages_apps_Launcher-4458ee4.zip AnderWeb-android_packages_apps_Launcher-4458ee4.zip AnderWeb-android_packages_apps_Launcher-4458...

    chrome_pwa_launcher.exe

    网络浏览器

    AndroidStudio替换项目图标ic_launcher操作

    Android Studio提供了一个便捷的工具来替换项目的图标,这个过程涉及多个步骤,下面我们将详细介绍如何在Android Studio中进行图标更换,特别是针对`ic_launcher`图标的操作。 1. **启动Image Asset Studio** 首先...

    pymol_launcher-2.1-cp27-cp27m-win_amd64

    pymol_launcher-2.1-cp27-cp27m-win_amd64

    android_packages_apps_Launcher-eclair

    Eclair是Android的一个版本代号,对应的是Android 2.0到2.1,这意味着这个启动器是为早期Android设备设计的。 通过分析这个项目的源代码,开发者可以学习以下关键知识点: 1. **Activity和Intent**: 启动器主要由...

    GTA5解决err_no_launcher

    需要先安装完破解补丁,将Launcher.cmd放到游戏根目录和launcher.exe一起。通过管理员权限打开Launcher.cmd来启动游戏。

    homebrew_launcher.v1.4.zip

    Homebrew Launcher v1.4 是一个为Wii U游戏机设计的开源软件工具,它允许用户在该平台上运行自制程序。这个压缩包“homebrew_launcher.v1.4.zip”包含了安装和运行homebrew应用所需的组件。Homebrew是针对各种电子...

Global site tag (gtag.js) - Google Analytics