[Android]Dagger2Metrics - 测量DI图表初始化的性能(翻译)
以下内容为原创,欢迎转载,转载请注明
来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5098943.html
Dagger2Metrics - 测量DI图表初始化的性能
原文:http://frogermcs.github.io/dagger2metrics-measure-performance-of-graph-initialization/
几个月前我们通过 Dagger 2 - graph creation performance 经历了一些可能会遇到的问题。多亏 TraceView 这个工具我们可以很确切地看到初始化所有需要的依赖需要多少时间。但是这并不简单 - 我们必须要在我们代码中找出需要开始和停止测量的地方,然后在Android Studio中dump和分析它们。为了让它变得更简单,我们准备了一个简单的库,它可以帮助我们捕捉潜在的性能问题。
Dagger2Metrics
Dagger 2 初始化过程的性能测量库
下面的描述内容是从 Dagger2Metrics Github 项目网站拷贝过来的。
如果你在Android应用中使用Dagger 2来进行依赖注入,你可能知道它最大的一处优化就是Google(原来是Square)的优秀工程师通过使用非反射代码实现。
即使有了所有的这些优化以及完全的非动态代码生成,但是仍然有潜在的性能问题隐藏在我们的代码中和所有通过Dagger 2注入的第三方代码中。
性能的问题通常是慢慢地变慢的,所以在每天的开发中是很难意识到我们的app(或者Activity、或者其他View)启动50ms或者更长。又一次变成150ms,又一次变成100ms...
使用Dagger2Metrics,你将可以看到初始化所有需要的依赖需要多少时间(以及这些依赖之间的依赖关系)。

准备开始
在你的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会捕捉所有的初始化,通过 - 所有带有 @Module -> @Provides 注解的方法和@Inject注解的构造方法。
总之,你会看到大多数顶级注入依赖地依赖关系树。每一个依赖显示了提供这些对象到Dagger 2对象图表需要多少时间(构建本身所用时间以及所有的依赖)。

为什么我看不到所有(子)依赖?
测量树不会显示那些已经提供给Dagger图表的依赖,所以只有从头开始构建的才会显示出来。主要是因为可读性以及另外一个简单的理由就是 - 我们不想在大多数没有错误的情况下去测量Dagger 2的性能。我们应该确保我们的代码尽可能快地提供依赖。
自定义
Dagger2Metrics 有3种默认级别的警告:
Dagger2Metrics.WARNING_1_LIMIT_MILLIS // 30ms
Dagger2Metrics.WARNING_2_LIMIT_MILLIS // 50ms
Dagger2Metrics.WARNING_3_LIMIT_MILLIS // 100ms
你可以根据你的需要对它们进行调整。
例子app
你可以查看 GithubClient 项目 - 一个展示怎么使用Dagger 2的Android app的例子。最近的版本在debug build中使用了Dagger2Metrics。
更多关于Dagger 2
如果你刚开始接触Dagger 2,下面的资源列表可以帮助你:
GithubClient - 基于Dagger 2依赖注入框架的Github API 客户端实现的例子。
Blog posts:
- Dagger 1 to 2 migration process
- Introdution to Dependency Injection
- Dagger 2 API
- Dagger 2 - custom scopes
- Dagger 2 - graph creation performance
代码:
以上描述的完整代码可见Github repository。
作者
Head of Mobile Development @ Azimo
> __[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的多绑定(翻译):__
[Android]Dagger2Metrics - 测量DI图表初始化的性能(翻译)的更多相关文章
- [Android]使用Dagger 2依赖注入 - 图表创建的性能(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5098943.html 使用Dagger 2依赖注入 - 图表创 ...
- [Android]使用Dagger 2来构建UserScope(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6237731.html 使用Dagger 2来构建UserSco ...
- [Android]使用Dagger 2依赖注入 - API(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092525.html 使用Dagger 2依赖注入 - API ...
- Android中,如何提升Layout的性能?
Layout 是 Android 应用中直接影响用户体验的关键部分.如果实现的不好,你的 Layout 会导致程序非常占用内存并且 UI 运行缓慢.Android SDK 带有帮助你找到 Layout ...
- (转)Android高性能编程(2)--延迟初始化
上一篇文章,讲到了很多Android应用开发中需要注意的性能和内存方面的技巧.这一篇文章就是从smali指令级来分析性能优化和内存优化的问题. 如何解决界面启动时间开销大的问题 我们在编写Androi ...
- Android学习之 AChartEngine 图表绘制
Android 开源图表绘制工具AChartEngine地址:http://code.google.com/p/achartengine/ AChartEngine Android实现图表绘制和展示( ...
- Android绘制优化(一)绘制性能分析
前言 一个优秀的应用不仅仅是要有吸引人的功能和交互,同时在性能上也有很高的要求.运行Android系统的手机,虽然配置在不断的提升,但仍旧无法和PC相比,无法做到PC那样拥有超大的内存以及高性能的CP ...
- 【Android测试】【第二节】性能——CPU时间片
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5143192.html 前言 第一节讲CPU的时候留下了一个 ...
- 【Android测试】【第一节】性能——CPU
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5065083.html 前言 本来打算写完全部的自动化测试之 ...
随机推荐
- 我的MYSQL学习心得(八) 插入 更新 删除
我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...
- Flappy Bird 源码走读
参考:https://github.com/kirualex/SprityBird 该项目基于spritekit,代码的结构很清楚,感觉用来学习spritekit非常不错. 1.项目只有一个viewC ...
- 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)
在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调 ...
- 网站使用https协议
了解https HTTPS 是以安全为目标的 HTTP 通道,即 HTTP 下加入 SSL 加密层.HTTPS 不同于 HTTP 的端口,HTTP默认端口为80,HTTPS默认端口为443. SSL ...
- Git异常:fatal: V1.0 cannot be resolved to branch.
GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...
- Android ButterKnife配置使用
ButterKnife在GitHub的地址:https://github.com/JakeWharton/butterknife 最新的版本是:8.4.0 app 模块的build.gradle: a ...
- SQL Server中提前找到隐式转换提升性能的办法
http://www.cnblogs.com/shanksgao/p/4254942.html 高兄这篇文章很好的谈论了由于数据隐式转换造成执行计划不准确,从而造成了死锁.那如果在事情出现之前 ...
- web前端性能调优
最近2个月一直在做手机端和电视端开发,开发的过程遇到过各种坑.弄到快元旦了,终于把上线了.2个月干下来满满的的辛苦,没有那么忙了自己准备把前端的性能调优总结以下,以方便以后自己再次使用到的时候得于得心 ...
- CSS教程:div垂直居中的N种方法以及多行文本垂直居中的方法
在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...
- 对C语言islower、isupper、isdigit函数的测试
今天朋友问起了这三个函数,我就帮忙测试了下,测试后发现谭浩强第四版课本附录上上讲的不是很严谨. 我们先看下这三个函数介绍: 谭浩强第四版课本附录第396页上这样介绍: 函数名 函数原型 功能 返回值 ...