在前面我的blog中,我已经说过了,Launcher所有的桌面项数据是存储在launcher.db/favorites表中
在Launcher启动时loadeworkspace函数中会从数据库中查询所有的数据并显示出来,这个桌面项数据加载过程在我的blog Launcher——启动过程详解中有比较详细的描述,这篇blog,我着重讲述Launcher桌面项的添加,变更和删除,下面就进入主题
1.Launcher桌面项的添加:从用户操作的角度来看,我们有两种方式来添加桌面项
--1.从all app view中拖到桌面,从下面的调用堆栈知道最后通过LauncherProvider.insert把拖过来的桌面项添加到了桌面,在拖放结束时执行(launcher2.Workspace.onDrop).
at com.android.launcher2.LauncherProvider.insert(LauncherProvider.java:129)
at android.content.ContentProvider$Transport.insert(ContentProvider.java:174)
at android.content.ContentResolver.insert(ContentResolver.java:587)
at com.android.launcher2.LauncherModel.addItemToDatabase(LauncherModel.java:242)
at com.android.launcher2.LauncherModel.addOrMoveItemInDatabase(LauncherModel.java:133)
at com.android.launcher2.Workspace.onDropExternal(Workspace.java:1203)
at com.android.launcher2.Workspace.onDropExternal(Workspace.java:1165)
at com.android.launcher2.Workspace.onDrop(Workspace.java:1125)
--2.通过长按桌面打开一个dialog来添加桌面项,通过对象框添加最后调用同样的方法LauncherProvider.insert去实现操作,只是前面的发起动作不同,它是在选择应用的activity结束后回到Launcher.onActivityResult发起调用的。
at com.android.launcher2.LauncherProvider.insert(LauncherProvider.java:129)
at android.content.ContentProvider$Transport.insert(ContentProvider.java:174)
at android.content.ContentResolver.insert(ContentResolver.java:587)
at com.android.launcher2.LauncherModel.addItemToDatabase(LauncherModel.java:242)
at com.android.launcher2.LauncherModel.addOrMoveItemInDatabase(LauncherModel.java:133)
at com.android.launcher2.Workspace.onDropExternal(Workspace.java:1203)
at com.android.launcher2.Workspace.addApplicationShortcut(Workspace.java:1117)
at com.android.launcher2.Launcher.completeAddApplication(Launcher.java:931)
at com.android.launcher2.Launcher.onActivityResult(Launcher.java:579)

2.Launcher桌面项的变更:Launcher桌面项的变更只有我们拖动桌面项,改变桌面项的位置,当结束拖放时,会通过调用LauncherProvider.update函数来修改launcher.db/favorites表中的记录来变更桌面项的位置信息。
at com.android.launcher2.LauncherProvider.update(LauncherProvider.java:185)
at android.content.ContentProvider$Transport.update(ContentProvider.java:204)
at android.content.ContentResolver.update(ContentResolver.java:707)
at com.android.launcher2.LauncherModel.moveItemInDatabase(LauncherModel.java:159)
at com.android.launcher2.Workspace.onDrop(Workspace.java:1144)

3.Launcher桌面项的删除:把桌面项拖动到垃圾箱时执行,不多说什么了,给个调用堆栈一看就明白,DeleteZone就是垃圾箱对象对应的构造类
at com.android.launcher2.LauncherProvider.delete(LauncherProvider.java:168)
at android.content.ContentProvider$Transport.delete(ContentProvider.java:198)
at android.content.ContentResolver.delete(ContentResolver.java:675)
at com.android.launcher2.LauncherModel.deleteItemFromDatabase(LauncherModel.java:271)
at com.android.launcher2.DeleteZone.onDrop(DeleteZone.java:123)

android Launcher——数据加载与变更相关推荐

  1. android Q launcher 数据加载流程

    时间:2020/08/24 之前公司不允许csdn,笔记写在其它地方.最近整理过来 下一篇:launcher数据加载(二) 前言 androidQ和androidP上Launcher结构有很大区别. ...

  2. android 请求大量数据处理,Android大量数据加载—Paging的使用

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Paging主要是用来结合RecyclerView进行使用的.它的作用是能够逐渐地.优雅地加载所需要加载的数据.也就是一 ...

  3. Launcher app数据加载流程

    Launcher是桌面,是用户第一眼看到的app应用,所有的应用都是现实通过Launcher管理显示在桌面上的!当app应用很多的时候,数据是怎么样加载的呢!我说一说单层桌面加载的流程上图是双层数据加 ...

  4. Android仿美团加载数据、小人奔跑进度动画对话框(附顺丰快递员奔跑效果)

    我们都知道在Android中,常见的动画模式有两种:一种是帧动画(Frame Animation),一种是补间动画(Tween Animation).帧动画是提供了一种逐帧播放图片的动画方式,播放事先 ...

  5. android loader使用教程,Android Loader 机制,让你的数据加载更加轻松

    前言 在 Android 中,任何耗时的操作都不能放在 UI 线程中,所以耗时的操作都需要使用异步加载来实现.其实,加载耗时数据的常用方式其实也挺多的,就让我们来看一下 1.Thread + Hand ...

  6. android MVP连接服务器,Android之MVP模式实现登陆和网络数据加载

    MVP简介 相信你们对 MVC 都是比较熟悉了:M-Model-模型.V-View-视图.C-Controller-控制器,MVP做为MVC的演化版本,也是做为用户界面(用户层)的实现模式,那么相似的 ...

  7. android 仿快递步骤_Android实现仿美团、顺丰快递数据加载效果

    我们都知道在Android中,常见的动画模式有两种:一种是帧动画(Frame Animation),一种是补间动画(Tween Animation).帧动画是提供了一种逐帧播放图片的动画方式,播放事先 ...

  8. 安卓学习笔记---Android仿美团加载数据、小人奔跑进度动画对话框(以及顺丰快递员奔跑效果)

    最近要加一个动态的加载功能,类似于美团的效果,这篇文章写的很好,可以借鉴 博客地址: http://blog.csdn.net/jdsjlzx/article/details/43489395 我们都 ...

  9. android 进lanucher的广播,Android开机优化之调整Launcher的加载时间

    前言 如前面两篇文章所描述的, 我们对Android系统的开机时间优化有了一个比较全面的了解,以及一些常用的调试手段(bootchart等),在这篇文章中我们先来看看如下这个问题,首先看一张图: 如上 ...

最新文章

  1. Arduino可穿戴教程认识ArduinoIDE
  2. matlab 摄像头操作
  3. c语言复制的代码不能运行,刚学C语言,在Linux下写的代码能正常编译,复制到VC下就无法运行...
  4. 停止FMS3.5的Apache服务
  5. 【HTML 初学】1、HTML元素
  6. mgr未同步 mysql_mysql8.0 搭建mgr踩坑记录
  7. 《活法》中一个故事--令托尔斯泰也折服的人性寓言
  8. java 递归 求一个数的阶乘
  9. 简单混合锁(HybridLock)
  10. angularjs 指令详解
  11. ARM开发6.3.1 基础实训( 1 ) 单个数码 LED 的显示输出系统设计( 1)--LPC21XX
  12. 测试C++代码与WebBrowser HTML的互动
  13. Oracle用户及角色的权限管理[Oracle基础]
  14. 老毛子固件相关内容!
  15. usb无线网卡安装在服务器上,USB无线网卡怎么用?USB无线网卡如何安装?
  16. C++学习(四零零)百度文库页面的核心代码(水印部分)
  17. Python报错 TypeError: Descriptors cannot not be created directly
  18. c++ mfc实现中英文菜单的动态切换
  19. 以太坊源码分析:fetcher模块和区块传播
  20. latex IEEE单栏文章图片双栏目排列

热门文章

  1. 精品软件 推荐 卡巴斯基安全软件 本人使用过的效果最好的杀毒软件之一哟...
  2. Array.prototype.slice Array.prototype.splice 用法阐述
  3. 开始学习openlayer
  4. 庆祝一下博文过100篇访问量过30万
  5. 简单的web接口自动化测试
  6. 经验之谈—让你看明确block
  7. 设计模式--责任链模式
  8. scrapy学习笔记1---一个爬取的完整例子
  9. EasyUI Datagrid 自定义列、Foolter及单元格编辑
  10. 如何动态获取UILabel的高度、宽度