android Launcher——数据加载与变更
在前面我的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——数据加载与变更相关推荐
- android Q launcher 数据加载流程
时间:2020/08/24 之前公司不允许csdn,笔记写在其它地方.最近整理过来 下一篇:launcher数据加载(二) 前言 androidQ和androidP上Launcher结构有很大区别. ...
- android 请求大量数据处理,Android大量数据加载—Paging的使用
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Paging主要是用来结合RecyclerView进行使用的.它的作用是能够逐渐地.优雅地加载所需要加载的数据.也就是一 ...
- Launcher app数据加载流程
Launcher是桌面,是用户第一眼看到的app应用,所有的应用都是现实通过Launcher管理显示在桌面上的!当app应用很多的时候,数据是怎么样加载的呢!我说一说单层桌面加载的流程上图是双层数据加 ...
- Android仿美团加载数据、小人奔跑进度动画对话框(附顺丰快递员奔跑效果)
我们都知道在Android中,常见的动画模式有两种:一种是帧动画(Frame Animation),一种是补间动画(Tween Animation).帧动画是提供了一种逐帧播放图片的动画方式,播放事先 ...
- android loader使用教程,Android Loader 机制,让你的数据加载更加轻松
前言 在 Android 中,任何耗时的操作都不能放在 UI 线程中,所以耗时的操作都需要使用异步加载来实现.其实,加载耗时数据的常用方式其实也挺多的,就让我们来看一下 1.Thread + Hand ...
- android MVP连接服务器,Android之MVP模式实现登陆和网络数据加载
MVP简介 相信你们对 MVC 都是比较熟悉了:M-Model-模型.V-View-视图.C-Controller-控制器,MVP做为MVC的演化版本,也是做为用户界面(用户层)的实现模式,那么相似的 ...
- android 仿快递步骤_Android实现仿美团、顺丰快递数据加载效果
我们都知道在Android中,常见的动画模式有两种:一种是帧动画(Frame Animation),一种是补间动画(Tween Animation).帧动画是提供了一种逐帧播放图片的动画方式,播放事先 ...
- 安卓学习笔记---Android仿美团加载数据、小人奔跑进度动画对话框(以及顺丰快递员奔跑效果)
最近要加一个动态的加载功能,类似于美团的效果,这篇文章写的很好,可以借鉴 博客地址: http://blog.csdn.net/jdsjlzx/article/details/43489395 我们都 ...
- android 进lanucher的广播,Android开机优化之调整Launcher的加载时间
前言 如前面两篇文章所描述的, 我们对Android系统的开机时间优化有了一个比较全面的了解,以及一些常用的调试手段(bootchart等),在这篇文章中我们先来看看如下这个问题,首先看一张图: 如上 ...
最新文章
- Arduino可穿戴教程认识ArduinoIDE
- matlab 摄像头操作
- c语言复制的代码不能运行,刚学C语言,在Linux下写的代码能正常编译,复制到VC下就无法运行...
- 停止FMS3.5的Apache服务
- 【HTML 初学】1、HTML元素
- mgr未同步 mysql_mysql8.0 搭建mgr踩坑记录
- 《活法》中一个故事--令托尔斯泰也折服的人性寓言
- java 递归 求一个数的阶乘
- 简单混合锁(HybridLock)
- angularjs 指令详解
- ARM开发6.3.1 基础实训( 1 ) 单个数码 LED 的显示输出系统设计( 1)--LPC21XX
- 测试C++代码与WebBrowser HTML的互动
- Oracle用户及角色的权限管理[Oracle基础]
- 老毛子固件相关内容!
- usb无线网卡安装在服务器上,USB无线网卡怎么用?USB无线网卡如何安装?
- C++学习(四零零)百度文库页面的核心代码(水印部分)
- Python报错 TypeError: Descriptors cannot not be created directly
- c++ mfc实现中英文菜单的动态切换
- 以太坊源码分析:fetcher模块和区块传播
- latex IEEE单栏文章图片双栏目排列