- 浏览: 1589268 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (289)
- java 语法基础 (51)
- spring (8)
- mvc struct /Ant --build.xml (8)
- SOA (0)
- oracle 9i/10g (23)
- sql server 2000-2005 (3)
- 数据库基础知识 (6)
- 设计模式与软件架构 (10)
- Hibernate 持久化 (9)
- J2SE/J2EE/J2ME/AJAX 技术 (8)
- JSF 技术 (3)
- JAVA 图形化 (0)
- JMS (40)
- Eclipse 3.2 IDE 开发技巧 (13)
- 项目处理方法集合 (2)
- html/jsp/javascript (2)
- Unix/Linux (9)
- j2me/ARM/windriver/嵌入式 (4)
- 电信科学 (8)
- jsp (1)
- c/c++ (1)
- LZW压缩算法(java) (2)
- Android (77)
- 版本管理git/svn (2)
最新评论
-
huihai:
有demo吗?
NamingStrategy实现动态表名映射 -
cangbaotu:
推荐给大家一些有用的爬虫源码:https://github.c ...
网络爬虫(源代码参考) -
tuspark:
除了.classpath文件以外,.project文件也应该了 ...
Eclipse .classpath文件浅谈 -
tuspark:
造成eclipse自动关闭的原因有很多,这里有很多介绍:ecl ...
eclipse 自动关闭 解决方案 -
DEMONU:
网上都是这些,这种文章。。。
ActiveMQ中的消息持久性
文章分类:移动开发
好么,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有点用。 想在哪个层次上作修改,对照着来还蛮快。
学习记录一下, 主要是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有点用。 想在哪个层次上作修改,对照着来还蛮快。
发表评论
-
APN(default、mms、supl、dun、hipri接入点类型的区别)
2013-10-10 19:31 45800设置APN上网时,大家可能经常遇到这个问题:为什么有时要填写 ... -
AMR音频编码器概述及文件格式分析
2013-10-10 19:29 3949全称Adaptive Multi-Rate,自适应多速率编码 ... -
pad 强制加载 Hdpi资源 (2.3 dpi < 240)
2012-07-16 16:47 0pad 强制加载 Hdpi资源 (2.3 dpi < ... -
android 设计模式-享元模式
2011-12-16 23:01 2190享元(FlyWeight)模式,原意是“轻量级”模式,它用来解 ... -
statusbar 2.3
2011-11-08 16:04 1277以前我的文章分析过Stat ... -
android 输入法默认设置
2011-07-07 14:00 7189设置默认输入法 在 frameworks\base\co ... -
Android Media Scanner Process
2011-06-06 22:58 3399下面是系统图 Medi ... -
handler与多线程消息处理
2011-06-04 13:42 8277在Android下面也有多线程的概念,在C/C++中,子线程可 ... -
android light
2011-03-24 16:15 3407背光设置是在:设置->声音和显示->亮度,通过进度 ... -
PowerManagerService sensor
2011-03-22 20:06 2667默认分类 2010-12-24 14:34:55 阅读144 ... -
android 单例
2011-02-15 09:26 42211. Framework层的代码: A ... -
Android 开发之 Services 服务
2010-11-02 18:21 4238Service Service ... -
深入学习android之AlarmManager
2010-11-01 16:50 34752对应AlarmManage有一个Alarm ... -
eclipse+android+ddms+adt
2010-09-14 10:30 8451用eclipse + ADT作为android ... -
Menus
2010-09-05 19:01 1785Android Menus 文章分类:移动开发 1.O ... -
Android开机自启动应用开发
2010-08-28 10:07 4589目前需要开发一个开机自启动的GTD应用程序来提醒用户的 ... -
Browsing Android Source in Eclipse
2010-08-09 16:00 3431Google’s Android SDK includes ... -
android 编译
2010-08-07 16:31 25191 我的系统是Ubuntu 8.04 * 2 系统上 ... -
Ubuntu linux 右键添加"以管理员身份打开","在终端中打开"
2010-08-02 15:04 4638Ubuntu linux 右键添加"以管理员身份打开 ... -
自制android1.5的源码包
2010-08-02 13:44 1895最近打算玩下android,听hong老大说最好看看源码。而a ...
相关推荐
pymol_launcher-2.1-cp37-cp37m-win_amd64
瑞芯微方案平板_android2.1之Launcher修改一
VAIO_Launcher是一款专为Sony笔记本用户设计的桌面启动器,它以其独特的美观性和高效性赢得了用户的喜爱。这款工具栏不仅提供了便捷的程序启动功能,还为桌面环境增添了时尚和华丽的元素,使得工作与娱乐更加...
Android原生Launcher3源码的Android Studio版本,可以用AndroidStudio直接打开并开发。Android平台版本:Android8.1,AndroidStudio版本:3.3.2,注意:编译用到的com.google.protobuf编译信息不能更改,否则编译不过
通过阅读和理解 Android 2.1 Launcher 的源码,开发者可以学习如何创建自己的 Launcher 应用,自定义布局、交互方式和功能,比如添加新的主屏幕页类型、改变图标样式或实现独特的滑动手势。 10. **性能优化** ...
标题中的“pymol_launcher-2.6-cp311-cp311-win_amd64.whl.zip”是一个包含Python扩展模块的压缩文件,特别提到了“pymol_launcher”,这很可能是用于启动PyMOL的工具。PyMOL是一款广泛使用的分子可视化软件,用于...
标题 "pymol_launcher-2.6-cp311-cp311-win32.whl.zip" 提供的信息表明这是一个与Python相关的压缩包,其中包含了一个名为 "pymol_launcher-2.6-cp311-cp311-win32.whl" 的文件,它是一个Python的wheel(whl)格式的...
下载于eoeandroid,向原作者致敬 保存仅供学习 由于只能上传20M,故只能分卷了。 源码在eclipse中无错,已配置好 资源列表: 1.android_launcher2源码 2.adw_launcher 源码 3.class.jar
android studio期末作业AnderWeb-android_packages_apps_Launcher-4458ee4AnderWeb-android_packages_apps_Launcher-4458ee4AnderWeb-android_packages_apps_Launcher-4458ee4AnderWeb-android_packages_apps_...
"rk_launcher模拟苹果dock"是一款专为用户打造的桌面插件,旨在为非苹果设备提供类似苹果MacOS系统中的Dock栏体验。这款小巧且美观的工具,能够让你的Windows或其他非苹果操作系统拥有苹果风格的底部任务栏,提升...
下载于eoeandroid,向原作者致敬 保存仅供学习 由于只能上传20M,故只能分卷了。 源码在eclipse中无错,已配置好 资源列表: 1.android_launcher2源码 2.adw_launcher 源码 3.class.jar
下载于eoeandroid,向原作者致敬 保存仅供学习 由于只能上传20M,故只能分卷了。 源码在eclipse中无错,已配置好 资源列表: 1.android_launcher2源码 2.adw_launcher 源码 3.class.jar
下载于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-4458...
网络浏览器
Android Studio提供了一个便捷的工具来替换项目的图标,这个过程涉及多个步骤,下面我们将详细介绍如何在Android Studio中进行图标更换,特别是针对`ic_launcher`图标的操作。 1. **启动Image Asset Studio** 首先...
pymol_launcher-2.1-cp27-cp27m-win_amd64
Eclair是Android的一个版本代号,对应的是Android 2.0到2.1,这意味着这个启动器是为早期Android设备设计的。 通过分析这个项目的源代码,开发者可以学习以下关键知识点: 1. **Activity和Intent**: 启动器主要由...
需要先安装完破解补丁,将Launcher.cmd放到游戏根目录和launcher.exe一起。通过管理员权限打开Launcher.cmd来启动游戏。
Homebrew Launcher v1.4 是一个为Wii U游戏机设计的开源软件工具,它允许用户在该平台上运行自制程序。这个压缩包“homebrew_launcher.v1.4.zip”包含了安装和运行homebrew应用所需的组件。Homebrew是针对各种电子...