当前位置: 代码网 > it编程>App开发>Android > Dagger2和它在SystemUI上的应用,android面试自我介绍范文

Dagger2和它在SystemUI上的应用,android面试自我介绍范文

2024年08月03日 Android 我要评论
【Android开发核心知识点笔记】【Android思维脑图(技能树)】【Android核心高级技术PDF文档,BAT大厂面试真题解析】【Android高级架构视频学习资源】【Android开发核心知识点笔记】[外链图片转存中…(img-gXU5pQFD-1711745505233)]【Android思维脑图(技能树)】[外链图片转存中…(img-1tDmvZ8Y-1711745505234)]【Android核心高级技术PDF文档,BAT大厂面试真题解析】

前些年我在调查某个导航栏bug的时候查阅过systemui的代码,当时意外地发现大量的模块包括statusbar、recents、keyguard等都是di方式引入的。虽然对dagger略有耳闻,但仍看得云里雾里,不得其解。

systemui作为android系统里最核心最复杂的app,称之为大型项目毫不过分。现在就来看看dagger2如何助力这个大型app管理大量的系统组件。

※ 源码版本:android 11

systemui中主要的依赖实例都管理在denpency类中。

public class dependency {

@inject @background lazy mbackgroundexecutor;
@inject lazy mclockmanager;
@inject lazy mactivitymanagerwrapper;
@inject lazy mdevicepolicymanagerwrapper;
@inject lazy mpackagemanagerwrapper;
@inject lazy msensorprivacycontroller;
@inject lazy mdockmanager;
@inject lazy minotificationmanager;
@inject lazy msysuistateflagscontainer;
@inject lazy malarmmanager;
@inject lazy mkeyguardsecuritymodel;
@inject lazy mdozeparameters;
@inject lazy mwallpapermanager;
@inject lazy mcommandqueue;
@inject lazy mrecents;
@inject lazy mstatusbar;
@inject lazy mdisplaycontroller;
@inject lazy msystemwindows;
}

后面以statusbar实例的注入为例阐述下systemui里dagger2的注入流程。

随着systemserver发出启动systemuiservice的请求,systemui的application将首先被实例化。在实例化之前,指定的appcomponentfactory实现类将会收到回调。

// androidmanifest.xml
<application
android:name=“.systemuiapplication”

tools:replace=“android:appcomponentfactory”
android:appcomponentfactory=“.systemuiappcomponentfactory”>

调用super得到application实例之后向其注册context准备完毕的回调,该回调会执行systemuifactory和di组件的初始化。

public class systemuiappcomponentfactory extends appcomponentfactory {
@inject
public contextcomponenthelper mcomponenthelper;

@override
public application instantiateapplicationcompat(
@nonnull classloader cl, @nonnull string classname)
throws instantiationexception, illegalaccessexception, classnotfoundexception {
application app = super.instantiateapplicationcompat(cl, classname);
if (app instanceof contextinitializer) {

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com