自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 【源码剖析】Launcher 8.0 源码 (23) --- Launcher 启动流程 第七步(结束)

第六步完成后,Launcher基本就结束了。Launcher8.0启动流程的第七步 横屏和callback等最后的善后工作 接下来是第七步:横屏和callback。  if (!mRotationEnabled) {        mRotationEnabled = Utilities.isAllowRotationPrefEnabled(getApplicationCon...

2018-07-30 09:34:25 483

原创 【源码剖析】Launcher 8.0 源码 (22) --- Launcher 启动流程 第六步之loadAllApps第2小步recycleVIew显示

Launcher8.0启动流程的第六步在workspace图标显示完成就开始准备allapp的显示。因为allapp需要点击或滑动allappButton才能打开,所以显示在workspace之后。Loadallapp是从系统获取所有的应用,然后将其显示到allapp里面。 继续bindallapp,完成了排序后,需要统计sectionname也就首字母,是用于allapp右侧的快捷栏。...

2018-07-30 09:34:15 516

原创 【源码剖析】Launcher 8.0 源码 (21) --- Launcher 启动流程 第六步之loadAllApps第1小步从系统读取数据

Launcher8.0启动流程的第六步在workspace图标显示完成就开始准备allapp的显示。因为allapp需要点击或滑动allappButton才能打开,所以显示在workspace之后。Loadallapp是从系统获取所有的应用,然后将其显示到allapp里面。 private void loadAllApps() {//仍然回调Launcher的方法,所以先获取Laun...

2018-07-26 11:36:59 781

原创 【源码剖析】Launcher 8.0 源码 (20) --- Launcher 启动流程 第六步之BindWorkspace 第2小步添加图标

Launcher8.0启动流程的第六步startLoader的bindWorkspace将sBgDataModel中的图标放到桌面上。 放置的时候为了提高用户体验,优先放置当前屏幕的图标和widget,然后再放其他屏幕的图标,这样用户能更快的看到图标显示完成。 在创建完屏幕后,添加桌面的图标进入bindWorkspaceItems()方法//绑定图标是回调Launcher的对应方法,...

2018-07-26 11:36:26 660

原创 【源码剖析】Launcher 8.0 源码 (19) --- Launcher 启动流程 第六步之BindWorkspace 第1小步创建屏幕

Launcher8.0启动流程的第六步startLoader的第一步Loadworkspace完成,接着是第二步bindworkspace。 这一步将sBgDataModel中的图标放到桌面上。 放置的时候需要先创建屏幕而后才能将图标放到屏幕里。 源码如下:private void bindWorkspace(int synchronizeBindPage) {    final l...

2018-07-26 11:35:51 553

原创 【源码剖析】Launcher 8.0 源码 (18) --- Launcher 启动流程 第六步之LoadWorkspace 第2小步(2)根据不同的图标类型放入不同的缓存中

Launcher8.0启动流程的第六步中loadworkspace的第2小步的做好准备后,已经锁定对于的数据库,并且开启循环读取模式,接着就是依次将读取的内容放入缓存中。 直接上源码,由于源码太长,无法分隔成多个小步来简化记忆。分析以注释的形式放在源码中间。            boolean allowMissingTarget = false;            swi...

2018-07-26 11:35:11 943

原创 【源码剖析】Launcher 8.0 源码 (17) --- Launcher 启动流程 第六步之LoadWorkspace 第2小步(1)图标各参数类型准备

Launcher8.0启动流程的第六步中loadworkspace的第1小步的结束是有一个带布局的数据库,而launcher布局不是直接从数据库放到桌面上,而是从数据库读取到BgDataModel的缓存中在放到桌面上。 如果不是第一次开机,那么数据库里面存储着布局的信息,第一小步是不做的,直接做第二小步获取数据库的信息。 第二小步就是获取数据库信息。将数据库的信息存入缓存中,即多个...

2018-07-26 11:34:29 466

原创 【源码剖析】Launcher 8.0 源码 (16) --- Launcher 启动流程 第六步之LoadWorkspace 第1小步(4)解析布局xml文件

Launcher8.0启动流程的第六步中loadworkspace的第1小步是获取数据库,在没有布局时,需要读取手机上的布局xml文件,通过第三个操作我们创建了新的数据库并选取了xml文件那么如何解析该xml文件呢? 答案是loadFavorites方法该方法把loader对应的xml布局文件放到数据库中。源码如下:int loadFavorites(SQLiteDatabas...

2018-07-26 11:33:40 482

原创 【源码剖析】Launcher 8.0 源码 (15) --- Launcher 启动流程 第六步之LoadWorkspace 第1小步(3)读取布局xml文件

Launcher8.0启动流程的第六步中loadworkspace的第1小步是获取数据库,在没有布局时,需要读取手机上的布局xml文件,通过第二个操作知道了到底选取哪里的xml文件,但是,手机的行列数参数是Launcher根据手机本身通过启动流程第一步获取的,在运行之前不知道,那么如何选择行列数正确的xml文件呢? 这里就涉及到一个重要的类 AutoInstallsLayout 和该类的一...

2018-07-26 11:32:12 622

原创 【源码剖析】Launcher 8.0 源码 (14) --- Launcher 启动流程 第六步之LoadWorkspace 第1小步(2)寻找布局xml的范围

Launcher8.0启动流程的第六步中loadworkspace的第1小步是获取数据库,首先完成第一个操作,判断有没有现成的数据库,如果没有现成数据库,则创建一个新的数据库,并且从手机中读取相应的布局。也就是第1小步的第二个操作,寻找布局文件的范围。loadDefaultFavoritesIfNecessary其源码如下:synchronized private void loadD...

2018-07-26 11:29:03 660

原创 【源码剖析】Launcher 8.0 源码 (13) --- Launcher 启动流程 第六步之LoadWorkspace 第1小步(1)call LauncherProvider

Launcher8.0启动流程的第六步生成布局,Launcher启动流程中最重要,最复杂,也是网上各种关于Launcher讲解的最浓墨淡彩描述的部分。其中的一部分loadworkspace就非常复杂涉及很多代码。从逻辑Loadworkspace一共可以分两小步,第1小步是获取数据库,如果有数据库则直接进入第2小步,如果数据库为空则从xml布局文件生成数据库。第2小步,从数据库读取信息存放到sB...

2018-07-26 11:25:44 1799

原创 【源码剖析】Launcher 8.0 源码 (12) --- Launcher 启动流程 第六步之简述

Launcher8.0启动流程的第六步生成布局,Launcher启动流程中最重要,最复杂,也是网上各种关于Launcher讲解的最浓墨淡彩描述的部分。第六步onCreate中源码如下: if (!mModel.startLoader(currentScreen)) {        mDragLayer.setAlpha(0);    } else {        mWorkspa...

2018-07-26 11:24:55 657

原创 【源码剖析】Launcher 8.0 源码 (11) --- Launcher 启动流程 第五步之细化布局具体参数

Launcher8.0启动流程的第五步,UI子模块的细节规划,各个模块的大小,真正的尺寸等等。这一步是采用第一步获取的方案,把第四步的模块细节进行完成。 在onCreate方法中,其源码如下: mDeviceProfile.layout(this, false /* notifyListeners */);    mExtractedColors = new ExtractedC...

2018-07-24 19:29:43 532

原创 【源码剖析】Launcher 8.0 源码 (10) --- Launcher 启动流程 第四步之第3小步桌面UI模块创建

Launcher8.0启动流程的第四步,第3小步同样服务于第四步setupView,创建UI的各个模块,各个模块在Launcher.xml作为一个整体存在。所以将各模块创建好,整体也自然而然的创建好了。 第三小步源码如下:    mWorkspace.setHapticFeedbackEnabled(false);    mWorkspace.setOnLongClickListe...

2018-07-24 19:29:06 509

原创 【源码剖析】Launcher 8.0 源码 (9) --- Launcher 启动流程 第四步之第2小步OverViewPanel及其三个按钮

Launcher8.0启动流程的第四步,第2小步。定义OverViewPanel,关于OverViewPanel的布局整体在res里面以xml文件形式存在,而对于其细节层面,比如点击之后有什么用则再java层详细定义,而第2小步则是定义OverViewPanel三个按钮的功能。 在setupView的完整源码,以setupOverviewPanel方法为分界线,分为3小步。说明setupO...

2018-07-24 19:28:33 992

原创 【源码剖析】Launcher 8.0 源码 (8) --- Launcher 启动流程 第四步之桌面布局简述和第1小步部分模块创建

Launcher8.0启动流程的第四步,生成桌面分布局。将UI布局的各个模块,进行基本创建,定义和绑定操作事件等。 在oncreate里面就是一个方法:setupViews()主要涉及的模块是DragLayer、Workspace、Qsb、Hotseat、OverviewPanel、AppsView、WidgetsView、DropTargetBar。 这几乎涵盖了桌面能够显示的所有U...

2018-07-24 19:27:56 671

原创 【源码剖析】Launcher 8.0 源码 (7) --- Launcher 启动流程 第三步之统一创建对象

Launcher8.0启动流程的第三步,统一创建对象。创建这些对象主要为后面定义UI各个模块,读取绑定图标操作,以及操作事件和后台运行等做准备。 之前创建LauncherAppState的时候,为了很好的得到参数,已经创建了很多对象,其中有很多对象是非常重要的,不仅在LauncherAppState中使用,也在Launcher中使用,所以,需要将之前创建过的类获取到Launcher中,除此...

2018-07-24 19:27:18 711

原创 【源码剖析】Launcher 8.0 源码 (6) --- Launcher 启动流程 第二步之启动流程中的分屏简介

启动流程第二步,对于分屏状态的判断。分屏状态是在当前手机有两个及以上的支持分屏功能的应用在前后台运行的时候长按recent按钮,而出现手机屏幕一分为二,可以同时有两个应用在前台运行和显示的功能。 第二步源码如下:if (isInMultiWindowModeCompat()) {    Display display = getWindowManager().getDefaultDi...

2018-07-24 19:26:12 646

原创 【源码剖析】Launcher 8.0 源码 (5) --- Launcher 启动流程 第一步(4)之LauncherAppState剩余创建流程

完成了最重要(对启动流程而言)的布局获取,剩下还需要进行Launcher的准备工作。 首先是mIconCache和WidgetPreviewLoader的构造。LauncherAppState构造器所创建第二个对象是IconCache,其代码如下:在IconCache类是存放图标中图片的信息。其中创建IconDB对象 public IconCache(Context con...

2018-07-23 18:42:13 860

原创 【源码剖析】Launcher 8.0 源码 (4) --- Launcher 启动流程 第一步(3)之获取布局参数(续)

第一步重点是找准模型,而后还是更多细节上面的工作,首先,对于真正的桌面,我们需要提供两套显示方案,分别是横屏方案和竖屏方案。两套方案的重点区别是长宽的区别。竖屏是上下距离大,而左右距离小。  而横屏则是左右距离大,上下距离小。于是通过将距离大的放在作为宽度还是作为长度就可以设定好布局。其代码如下:    int smallSide = Math.min(realSize.x, r...

2018-07-23 18:41:34 816

原创 【源码剖析】Launcher 8.0 源码 (3) --- Launcher 启动流程 第一步(2)之获取硬件参数,确定布局参数

获取桌面布局参数,是在InvariantDeviceProfile进行,而后在DeviceProfile中完成参数的规划。参数布局是采用profile比较来完成。mInvariantDeviceProfile = new InvariantDeviceProfile(mContext);LauncherAppState构造器里的第一行代码,其源码如下: InvariantDevic...

2018-07-23 18:40:27 757

原创 【源码剖析】Launcher 8.0 源码 (2) --- Launcher 启动流程 第一步(1)之LauncherAppState 对象创建简述

从综述将启动流程拆分成7步,其中第一步,重点是通过手机的硬件来获取信息。关于第一步在oncreate中的源码如下:@Overrideprotected void onCreate(Bundle savedInstanceState) {if (mLauncherCallbacks != null) {    mLauncherCallbacks.preOnCreate();}s...

2018-07-23 18:38:41 1274

原创 【源码剖析】Launcher 8.0 源码 (1) --- Launcher 启动流程 综述

现在网上关于Launcher启动流程的源码分析流传最多的是google Launcher2.0的启动流程。截止2018年5月,google Launcher已经到了8.0版本。 经对比,8.0和2.0的启动流程大同小异,整体流程依然保留了2.0的结构特征,以LauncherAppState开始获取手机各项参数,从Launcher到LauncherModel再由LauncherModel到L...

2018-07-23 18:37:12 2379

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除