【源码解析】Launcher 8.0源码(8)---Launcher的源码启动过程第三步之创建统一Launcher辅助对象

Launcher8.0的Launcher的源码启动过程第三步是创建一系列的Launcher辅助对象,包括UI图标数据的处理类,具体拖拽操作的辅助类,以及为后台运行做准备。

具体的源码部分是这样写的:

       1. mOrientation = getResources().getConfiguration().orientation;
       2. mSharedPrefs = Utilities.getPrefs(this);
       3. mIsSafeModeEnabled = getPackageManager().isSafeMode();
       4. mModel = app.setLauncher(this);
       5. mModelWriter = mModel.getWriter(mDeviceProfile.isVerticalBarLayout());
       6. mIconCache = app.getIconCache();
       7. mAccessibilityDelegate = new LauncherAccessibilityDelegate(this);

       8. mDragController = new DragController(this);
       9. mAllAppsController = new AllAppsTransitionController(this);
       10. mStateTransitionAnimation = new LauncherStateTransitionAnimation(this, mAllAppsController);

       11. mAppWidgetManager = AppWidgetManagerCompat.getInstance(this);

       12. mAppWidgetHost = new LauncherAppWidgetHost(this);
       13. if (Utilities.ATLEAST_MARSHMALLOW) {
            mAppWidgetHost.addProviderChangeListener(this);
        }
       14. mAppWidgetHost.startListening();

        // If we are getting an onCreate, we can actually preempt onResume and unset mPaused here,
        // this also ensures that any synchronous binding below doesn't re-trigger another
        // LauncherModel load.
       15. mPaused = false;

       16. mLauncherView = LayoutInflater.from(this).inflate(R.layout.launcher, null);

每一步都标上序号,我们来一一进行分析:

第一个对象是mOrientation 获取当前手机处于横屏还是竖屏

横竖屏状态下包括布局,操作等都有不同。

第二个对象是SharedPreferences

这里创建的sp对象在Launcher中起着重量级的作用,除了存储桌面布局的行为在在LauncherProvider完成,剩下的信息基本都在SharedPreferences中保存,比如默认屏幕是哪一屏。特别是长按桌面空白的home Settings的选项都是使用SharedPreferences。

第三个对象是获取当前时候处于安全模式下。

设备在日常使用过程中,不可避免的会添加安装第三方应用。但并不是每一个应用都是安全的,对系统无伤害的。由于第三方应用程序,可能会存在一定的兼容性问题,所以在安装软件后可能会出现系统文件报错,甚至手机无法正常开机或者开机后系统程序不停报错的现象。遇到这种情况,若进行恢复出厂设置,手机中的资料是无法进行备份的,但是Android系统中添加了"安全模式"这项功能,有效的避免上述情况同时来排除故障。安全模式下,只能启动系统应用,第三方应用都不会开启或者启动。

第四个对象是LauncherModel

继承BroadcastReceiver,是一个广播接收器,用来接收广播,主要作用是加载数据,处理数据,保存桌面状态,内部类LoaderTask用来初始化桌面。LauncherModel是非常重要的一个类,在启动流程中占据了半壁江山

第五个对象是 ModelWriter

LauncherModel的辅助类,修改储存在数据库里面的数据。

第六个对象是IconCache

此类主要保存图标信息,图标的图片实际都是有各个APK自主提供,而Launcher通过系统接口从手机中读取所有应用的图标将其存在缓存中,避免每次刷新都从手机读取。如果一个应用未能读取到图标,则采用默认图标,也就是安卓小机器人。

第七个对象是LauncherAccessibilityDelegate

拖拽的辅助类,里面的事件有添加,拖动等。

第八个对象DragController

DragController是处理拖拽的重要类,Launcher的顶级布局是DragLayer,所有的拖拽都是在这个布局中完成的,DragController就是DragLayer实现拖拽的辅助类。

第九个对象AllAppsTransitionController

AllAppsController服务于AllAppsContainerView,帮助处理allapp的拖拽等事件。(这个界面是装载所有App的界面)

第十个对象LauncherStateTransitionAnimation

Launcher各个模块之前的切换。比如,从普通模式到拖拽模式,从普通模式到overview模式,从普通模式到allapp模式等等。 LauncherStateTransitionAnimation则是负责完成从一个模式到另一个模式切换的类。

第十一个对象AppWidgetManagerCompat

是辅助AppWidgetManager的一个类,Launcher会从AppWidgetManager中获取一些数据,并且进行一个简单处理后再使用。在实际使用过程中,Launcher发现好多地方都会用到AppWidgetManager的数据,且进行相同的处理。 写好代码的规则有一条,是“代码重构”的相关知识点,其中有种“坏味道”叫做“重复代码”。 简单说,如果同样代码在整个应用中多次出现,则应该把这些代码统一放到一个方法里面。这样代码只出现一次。后面处理方式发生变化,只需在一处修改即可。像对AppWidgetManager处理方式有好几种,每种都好多处用到。则单独创建一个类来存放。

第十二个对象 LauncherAppWidgetHost

创建一个Widget组件。确保Widget可以拖拽。

第十三步添加CallBack

判断当前版本,给Weight添加变化的监听器。

第十四步mAppWidgetHost.startListening()

startListening意味着桌面的widget收到对应app的控制。

第十五步mPaused = false

此参数是用于判断当前Launcher是否处于mPause状态。因为Launcher而有很多后台被动操作,也就是说很有可能Launcher在后台的时候被其他应用调用,这个时候有些行为就需要知道是否处于mPaused

第十六步获取布局。
以上就是Launcher的源码启动过程第三步
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 这么些年居然没有养成一个好的习惯。 上学也十几年了,爱书,却不爱读书,爱书之心却不足以阻挡一颗喧闹的内心。
    阴影中的葱阅读 250评论 0 0
  • 文/苍耳 第一次听浮生这首歌,是他唱给我听的,于是因为他所以才认识了刘莱斯,一个南京独立音乐人。 刘莱斯,一个并不...
    苍耳CE阅读 9,704评论 3 7
  • 转眼四月天 唱响点亮四面风, 情可缕空,情可缕空, 原来是在精雕细刻中。 爱情若是精致了, 怎会衍生柴米油盐! 心...
    梁汝阅读 119评论 2 4
  • -1- 快速路上,看着那看不到尽头的汽车长龙,实在着急,还有15分钟就要迟到了,没想到今天这个时间还会这么塞车。怎...
    夏日香气helen阅读 266评论 0 1