博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android]Dagger2Metrics - 测量DI图表初始化的性能(翻译)
阅读量:6950 次
发布时间:2019-06-27

本文共 2234 字,大约阅读时间需要 7 分钟。

以下内容为原创,欢迎转载,转载请注明
来自天天博客:

Dagger2Metrics - 测量DI图表初始化的性能

原文:

几个月前我们通过 经历了一些可能会遇到的问题。多亏 这个工具我们可以很确切地看到初始化所有需要的依赖需要多少时间。但是这并不简单 - 我们必须要在我们代码中找出需要开始和停止测量的地方,然后在Android Studio中dump和分析它们。为了让它变得更简单,我们准备了一个简单的库,它可以帮助我们捕捉潜在的性能问题。

Dagger2Metrics

Dagger 2 初始化过程的性能测量库

下面的描述内容是从 Dagger2Metrics Github 拷贝过来的。

如果你在Android应用中使用Dagger 2来进行依赖注入,你可能知道它最大的一处优化就是Google(原来是Square)的优秀工程师通过使用非反射代码实现。

即使有了所有的这些优化以及完全的非动态代码生成,但是仍然有潜在的性能问题隐藏在我们的代码中和所有通过Dagger 2注入的第三方代码中。

性能的问题通常是慢慢地变慢的,所以在每天的开发中是很难意识到我们的app(或者Activity、或者其他View)启动50ms或者更长。又一次变成150ms,又一次变成100ms...

使用Dagger2Metrics,你将可以看到初始化所有需要的依赖需要多少时间(以及这些依赖之间的依赖关系)。

dagger2metrics.png

准备开始

在你的build.gradle中:

buildscript {  repositories {    jcenter()  }  dependencies {    classpath 'com.frogermcs.dagger2metrics:dagger2metrics-plugin:0.2'  }}apply plugin: 'com.android.application'apply plugin: 'com.frogermcs.dagger2metrics'

在你的Application类中:

public class ExampleApplication extends Application { @Override public void onCreate() {     super.onCreate();     //Use it only in debug builds     if (BuildConfig.DEBUG) {         Dagger2Metrics.enableCapturing(this);     }  } }

这样就完成了。在你的app中,你将会看到notification,它可以打开所有已完成的初始化的一个简单的概述。

dagger2metrics-notification.png

它是怎么工作的?

Dagger2Metrics会捕捉所有的初始化,通过 - 所有带有 @Module -> @Provides 注解的方法和@Inject注解的构造方法。

总之,你会看到大多数顶级注入依赖地依赖关系树。每一个依赖显示了提供这些对象到Dagger 2对象图表需要多少时间(构建本身所用时间以及所有的依赖)。

dagger2metrics.png

为什么我看不到所有(子)依赖?

测量树不会显示那些已经提供给Dagger图表的依赖,所以只有从头开始构建的才会显示出来。主要是因为可读性以及另外一个简单的理由就是 - 我们不想在大多数没有错误的情况下去测量Dagger 2的性能。我们应该确保我们的代码尽可能快地提供依赖。

自定义

Dagger2Metrics 有3种默认级别的警告:

Dagger2Metrics.WARNING_1_LIMIT_MILLIS // 30msDagger2Metrics.WARNING_2_LIMIT_MILLIS // 50msDagger2Metrics.WARNING_3_LIMIT_MILLIS // 100ms

你可以根据你的需要对它们进行调整。

例子app

你可以查看 项目 - 一个展示怎么使用Dagger 2的Android app的例子。最近的版本在debug build中使用了Dagger2Metrics。

更多关于Dagger 2

如果你刚开始接触Dagger 2,下面的资源列表可以帮助你:

- 基于Dagger 2依赖注入框架的Github API 客户端实现的例子。

Blog posts:

代码:

以上描述的完整代码可见Github 。

作者

Head of Mobile Development @

[Android]使用Dagger 2依赖注入 - DI介绍(翻译):

[Android]使用Dagger 2依赖注入 - API(翻译):

[Android]使用Dagger 2依赖注入 - 自定义Scope(翻译):

[Android]使用Dagger 2依赖注入 - 图表创建的性能(翻译):

[Android]Dagger2Metrics - 测量DI图表初始化的性能(翻译):

[Android]使用Dagger 2进行依赖注入 - Producers(翻译):

[Android]在Dagger 2中使用RxJava来进行异步注入(翻译):

[Android]使用Dagger 2来构建UserScope(翻译):

[Android]在Dagger 2中Activities和Subcomponents的多绑定(翻译):

你可能感兴趣的文章
备用java方法
查看>>
openlayers加载切片地图
查看>>
CentOS7部署Kubernetes集群
查看>>
使用hyperpacer实现AWR报告的同步收集
查看>>
linux 下mysql的乱码问题
查看>>
mongodb删除重复数据
查看>>
橡皮泥_愤怒的小鸟
查看>>
CentOS6.5最小化安装,自定义安装包
查看>>
扩展jQuery easyui datagrid增加动态改变列编辑的类型
查看>>
通过Linux shell实现的花生壳动态域名解析(DDNS)
查看>>
Mysql 生成按月份统计SQL语句,为null设置为0
查看>>
1.6的锁优化(适应性自旋/锁粗化/锁削除/轻量级锁/偏向锁)
查看>>
使用 IntraWeb (17) - 基本控件之 TIWRadioButton、TIWRadioGroup、TIWCheckBox
查看>>
CSS解决高度自适应问题
查看>>
Thinkpad ACCESS CONNECTIONS异常解决
查看>>
ubuntu16.04 安装 操作 redis
查看>>
PHP文件上传-单文件上传函数
查看>>
通过SNMP获取接口速率 32位与64位的区别
查看>>
(1)Powershell简介
查看>>
Logtail提升采集性能
查看>>