`
weicaijin8
  • 浏览: 32706 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android 启动Launcher的说明

阅读更多
LauncherApplication->onCreate
  1.//设置最小堆内存4M
  2.//建立应用图标缓存器
  3.//建立LauncherModel
  4.//注册Intent.ACTION_PACKAGE_ADDED,Intent.ACTION_PACKAGE_REMOVED,Intent.ACTION_PACKAGE_CHANGED事件监听器
  LauncherModel作为广播接收器对上面3中事件进行监听
  5.//添加对桌面favorites content provider 数据变化监听器
  二Launcher->onCreate
  1.获取LauncherApplication LauncherModel mIconCache等LauncherApplication初始化的对象
  2.新建拖放控制器new DragController(this)
  4.//获取桌面组件管理器,启动桌面组件host
  5.//从array.hotseats中加载所有的hotseats(热键 如挂机按钮,google浏览器)
  6.从launcher.preferences加载本地设置
  7.//设置壁纸尺寸宽度=display.getWidth()* WALLPAPER_SCREENS_SPAN,高度=display.getHeight()
  8.//加载布局文件
  9.//初始化所有控件
  10.//从Bundle savedInstanceState获取桌面持久化数据 设置mRestoring = true;
  11.如果mRestoring == false,调用LauncherModel加载桌面项 mModel.startLoader(this, true,isLanguageChange);
  a.LauncherModel.Loader.startLoader() 代码同步处理
  b.新建LauncherModel.Loader.LoaderThread线程并启动线程(桌面项加载,详细见第三步)
  12.注册Intent.ACTION_CLOSE_SYSTEM_DIALOGS广播监听
  三 桌面项加载 LauncherModel.Loader.LoaderThread.run:新线程执行
  1.等待主线程运行结束才开始加载
  2.判断是否先加载桌面;loadWorkspaceFirst = cbk != null ? (!cbk.isAllAppsVisible()) : true;
  3.loadWorkspaceFirst==true
  a.loadAndBindWorkspace()
  loadWorkspace():从数据库launcher.db中查询中所有桌面项构造对应类型的ItemInfo对象存入
  mItems,mAppWidgets,mFolders列表.
  bindWorkspace():
  1.laucher.startBinding(),异步调用,在主线程中handle
  //do no things
  2.laucher.bindItems(),异步调用,在主线程中handle
  1.根据ItemInfo对象创建桌面图标view对象
  2.获取item.screen, item.cellX, item.cellY, spanX, spanY,
  调用workspace.addInScreen添加到对应桌面的cell
  1.重新设置桌面图标view 的layoutparam(类型为cellLayout.layoutparam)
  2.根据item.screen获取桌面的celllayout对象,也就是workspace下5个用户桌面中的一个
  3.调用celllayout.addview方法把桌面图标view对象添加为celllayout的child,也就是为用户桌面添加一个桌面图标
  4.桌面图标view对象添加OnLongClickListener=laucher,由laucher负责监听桌面图标view的longclick事件
  5.如果桌面图标是DropTarget对象,拖放控制器mDragController添加该view到拖放目的地列表
  3.laucher.bindFolders(),异步调用,在主线程中handle
  //launcher.mFolders.putAll(mFolders);
  4.laucher.bindAppWidget(),异步调用,在主线程中handle
  1.获取LauncherAppWidgetInfo的appWidgetId
  2.获取AppWidgetProviderInfo appWidgetInfo mAppWidgetManager.getAppWidgetInfo(appWidgetId)
  3.根据appWidgetInfo创建桌面组件的view AppWidgetHostView对象
  4.调用workspace.addInScreen添加到对应桌面的cell
  5.laucher.finishBindingItems(),异步调用,在主线程中handle
  mWorkspaceLoading=false
  b.loadAndBindAllApps();
  如果没有加载apps或者改变了语言设置
  loadAllAppsByBatch();
  1.//设置package 查询条件Intent.ACTION_MAIN Intent.CATEGORY_LAUNCHER
  2.//清空mAllAppsList mAllAppsList.clear();
  3.//packageManager 查询所有应用pakages
  4.分批次mAllAppsList.add 应用pakages
  5.laucher.bindAllApplications()//异步调用
  mAllAppsGrid.setApps(apps)
  6.若分多个批次加载 laucher.bindAppsAdded()//异步调用
  mAllAppsGrid.addApps(apps);
  否则
  onlyBindAllApps();
  1.mAllAppsList.data.clone();
  2.laucher.bindAllApplications()//异步调用
  mAllAppsGrid.setApps(apps)
  4.loadWorkspaceFirst==false
  a.loadAndBindAllApps();
  b.loadAndBindWorkspace();
分享到:
评论

相关推荐

    Android launcher 解析

    Android launcher 很细致说明了framework层启动机制

    Apex_Launcher_Pro_v4.9.9.apk

    Apex Launcher可帮助您在Android(4.0+)设备上创建自定义的主屏幕体验。适用于Android 4.0以上版本的功能强大,快速且高度可定制的家庭替代产品。 Apex Launcher Pro(付费版)功能: •强大的抽屉自定义功能...

    Android高手进阶教程与Android基础教程

    Android读写XML(上)——package说明.doc Android读写XML(下)——创建XML文档.doc Android读写XML(中)——SAX.doc Android高手进阶教程之----Android Handler的使用!!! .doc Android高手进阶教程之----Android ...

    Nova Launcher Prime 6.1.5.apk

    Nova Launcher是现代Android的顶级发射器,全程采用完整的Material Design。Nova Launcher用您控制的主屏幕取代您的主屏幕,并可以自定义。更改图标,布局,动画等。 Nova Launcher Prime特点: 手势 - 在主屏幕上...

    Nova_Launcher_Pro_v6.2.9.apk

    Nova Launcher是现代Android的顶级启动器,始终采用完整的Material Design。Nova Launcher将您的主屏幕替换为您可以控制并可以自定义的主屏幕。更改图标,布局,动画等。 Nova Launcher主要功能: 手势–在主...

    唯爱交友源码java-LB-Launcher:一个真正开源的启动器应用程序,基于与Android相同的启动器应用程序

    嗯,它是基于“Launcher3”的启动器,所以......无论如何这里是一个示例动画: 待办事项/愿望 我希望这个启动器是: 始终保持开源并且对所有人免费。 将来可能会添加捐赠功能(但仅对用户可选),但每个人都会获得...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    疯狂Android讲义源码

     14.3.2 向Launcher添加快捷方式 534  14.4 管理桌面小控件 535  14.5 实时文件夹(LiveFolder) 539  14.5.1 使用实时文件夹显示  ContentProvider的数据 540  14.6 本章小结 545  第15章 传感器应用开发 ...

    Pixelful_Icon_Pack_Pro_v7.1.apk

    Google Now Launcher,Pixel Launcher或工厂安装的任何其他启动器均不支持图标包(LG Home,Xperia Home和Asus ZenUI除外)。我无法支持不支持主题选项的启动器。请不要问这个问题。 •新型牛轧糖LG Home,因为LG...

    Android仿百度桌面源码

    本项目是一个高仿安卓百度桌面原型小工具项目源码,启动应用后会有一个转盘效果,默认显示最近使用的应用图标,按住转盘转动可以查看最近使用和最近安装的程序,点击应用图标就可以直接启动应用。并且转动转盘的时候...

    CMD-Launcher:这是控制台应用程序启动器,您可以直接在其所在的文件夹中启动cmd或充当其他控制台应用程序

    :page_facing_up: 说明 启动该应用程序后,只需按“ ENTER ”按钮,即可在其放置的文件夹中调用cmd.exe。 第二个功能是直接在其界面中启动控制台应用程序,这意味着,如果将其重命名为“ _targetappname.exe ”,...

    nine-cards-v2:在Android上使用Scala构建的开源Android启动器

    9张卡9 Cards是Android的开源家庭启动器,其代码全部用Scala编写。 它提供了将应用程序组织到集合中的功能,可以随意随意快速,轻松地访问更常用的应用程序。 自2019年1月起,9卡牌项目现在被放弃,该应用程序在...

    Android代码-[ROOT] Smart Lock 启动器 – Smart Lock 设置快捷方式

    Smart Lock Launcher [ROOT REQUIRED] A small shortcut to open Google's Smart Lock settings for Chinese ROMs. License Copyright 2017 Rachel030219 Licensed under the Apache License, Version 2.0 (the ...

    疯狂Android讲义.part2

    14.3.2 向Launcher添加快捷方式 534 14.4 管理桌面小控件 535 14.5 实时文件夹(LiveFolder) 539 14.5.1 使用实时文件夹显示 ContentProvider的数据 540 14.6 本章小结 545 第15章 传感器应用开发 546 15.1 利用...

    疯狂Android讲义.part1

    14.3.2 向Launcher添加快捷方式 534 14.4 管理桌面小控件 535 14.5 实时文件夹(LiveFolder) 539 14.5.1 使用实时文件夹显示 ContentProvider的数据 540 14.6 本章小结 545 第15章 传感器应用开发 546 15.1 利用...

    Pixelful_Icon_Pack_Pro_v7.3.apk

    Google Now Launcher,Pixel Launcher或工厂安装的任何其他启动器均不支持图标包(LG Home,Xperia Home和Asus ZenUI除外)。我无法支持不支持主题选项的启动器。请不要问这个问题。 •新的牛轧糖LG Home,由于LG...

    PojavLauncher:Minecraft:基于Boardwalk的Android Java版启动器。 请注意,第2版将无法运行Minecraft 1.12+

    导航介绍PojavLauncher是一款基于的Minecraft:Java版Android启动器。 该启动器可以启动几乎所有可用的Minecraft版本(从rd-132211到最新的1.17快照,包括Combat Test版本)。 还支持通过Forge和Fabric进行改装。...

    MapView的使用

    启动命令行 直接 输入如下内容: keytool -list -alias androiddebugkey -keystore "C:\Documents and Settings\Administrator\Local Settings\Application Data\Android\debug.keystore" -storepass android -...

    SideQuest:一个开放式应用程序商店,用于基于移动android的VR设备,例如Oculus Go,Oculus Quest甚至是Moverio BT 300(IKR?)

    在开始之前,请务必遵循设置屏幕中的说明-特别是安装OpenStore Launcher应用程序,以便安装后即可在设备上找到这些应用程序。 SideQuest功能 自动为您的平台下载ADB平台工具-win / mac / linux。 在设备上启用开发...

    360黑科技DroidPlugin.zip

     android:icon="@drawable/ic_launcher"如果你使用自定义的Application,那么你需要在自定义的Application class onCreate和attachBaseContext方法中添加如下代码:@Override public void onCreate() {  ...

Global site tag (gtag.js) - Google Analytics