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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

Launcher8.0启动流程的第三步,统一创建对象。创建这些对象主要为后面定义UI各个模块,读取绑定图标操作,以及操作事件和后台运行等做准备。

 

之前创建LauncherAppState的时候,为了很好的得到参数,已经创建了很多对象,其中有很多对象是非常重要的,不仅在LauncherAppState中使用,也在Launcher中使用,所以,需要将之前创建过的类获取到Launcher中,除此之外,还有一些和显示,操作,后台相关的类也需要创建出对象。

在Launcher8.0中,第三步创建对象的源码如下:

 

mSharedPrefs = Utilities.getPrefs(this);
mModel = app.setLauncher(this);
mIconCache = app.getIconCache();
mDragController = new DragController(this);
mAllAppsController = new AllAppsTransitionController(this);
mStateTransitionAnimation = new LauncherStateTransitionAnimation(this, mAllAppsController);
mAppWidgetManager = AppWidgetManagerCompat.getInstance(this);
mAppWidgetHost = new LauncherAppWidgetHost(this, APPWIDGET_HOST_ID);
mAppWidgetHost.startListening();
mPaused = false;

mLauncherView = getLayoutInflater().inflate(R.layout.launcher, null);

这一步一共有11行代码,一共创建了8个对象和进行了3个操作。

 

第一个对象是创建SharedPreferences,在Launcher中database储存桌面布局此行为在LauncherProvider完成而SharedPreferences用于储存剩下的所有信息。比如默认屏幕是哪一屏。特别是长按桌面空白的home Settings的选项都是使用SharedPrefere

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

相关推荐

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

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

dax120的博客 770

Android M Launcher3主流程源码浅析

其实很简单就下面这张图,含概了Android所有需要学的知识点,一共8大板块:架构师筑基必备技能Android框架体系架构(高级UI+FrameWork源码)360°Androidapp全方位性能调优设计思想解读开源框架NDK模块开发移动架构师专题项目实战环节移动架构师不可不学习微信小程序混合开发的flutterAndroid学习的资料我呢,把上面八大板块的分支都系统的做了一份学习系统的资料和视频,大概就下面这些,我就不全部写出来了,不然太长了影响大家的阅读。

m0_60229361的博客 1484

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

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

dax120的博客 893

AOSP Android14 Launcher3——Launcher的状态介绍LauncherState类

***//*** app*/NORMAL(普通状态 / 主屏幕)描述: 这是 Launcher 的默认状态,显示用户的主屏幕 Workspace 和 Hotseat。触发: 应用启动时、从其他状态(如 All Apps、Overview)通过 Home 键或 Back 键返回时。NORMAL状态就是默认的桌面状态(弹簧加载状态)描述: 当用户长按 Workspace 上的图标或小部件并开始拖动时进入的状态。

Micheal_Yang's Blog 1596

Launcher的长按---移动---松开

launcher

qq_43898917的博客 991

Android系统启动-Launcher进程

相关源码: 在前面文章中分别讲解了在[SystemServer进程]的**startBootstrapServices()、startOtherServices()**方法中启动了[ActivityManagerService(ActivityTaskManagerService)])和[PackageManagerService系统服务。系统的桌面进程Launcher就是在[ActivityManagerService服务]启动完成后开始启动。方法中开始了Launcher进程的启动 在AMS的syste

m0_56146626的博客 1156

Android之AppWidget 开发浅析

AppWidget

Makenna's World 1613

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

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

dax120的博客 589

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

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

dax120的博客 732

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

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

dax120的博客 636

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

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

dax120的博客 781

Android系统启动流程

在此说明,此文章只是个人的一个关于“Android系统启动流程”的一个总结,没什么源码Android系统启动流程: 1、启动电源以及系统启动: 当电源键按下时引导芯片代码从预定义的地方(固化在ROM)开始执行。加载引导程序BootLoader到RAM中,然后执行。 2、引导程序BootLoader: 引导程序BootLoader是在Android操作系统开始运行前的一个小程序,它的主...

shaoenxiao的博客 2万+

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

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

dax120的博客 640

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

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

dax120的博客 1393

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

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

dax120的博客 614

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

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

dax120的博客 1946

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

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

dax120的博客 975

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

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

dax120的博客 785

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

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

dax120的博客 785
上一篇: 【源码剖析】Launcher 8.0 源码 (6) --- Launcher 启动流程 第二步之启动流程中的分屏简介
下一篇: 【源码剖析】Launcher 8.0 源码 (8) --- Launcher 启动流程 第四步之桌面布局简述和第1小步部分模块创建
帝求仁
博客等级 码龄9年 77粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值