[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:

代码:

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

作者

Miroslaw Stanek

Head of Mobile Development @ Azimo


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

http://www.cnblogs.com/tiantianbyconan/p/5092083.html


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

http://www.cnblogs.com/tiantianbyconan/p/5092525.html


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

http://www.cnblogs.com/tiantianbyconan/p/5095426.html


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

http://www.cnblogs.com/tiantianbyconan/p/5098943.html


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

http://www.cnblogs.com/tiantianbyconan/p/5193437.html


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

http://www.cnblogs.com/tiantianbyconan/p/6234811.html


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

http://www.cnblogs.com/tiantianbyconan/p/6236646.html


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

http://www.cnblogs.com/tiantianbyconan/p/6237731.html


本文转自天天_byconan博客园博客,原文链接:

http://www.cnblogs.com/tiantianbyconan/p/5193437.html

,如需转载请自行联系原作者

相关文章
|
5月前
|
移动开发 监控 前端开发
构建高效Android应用:从优化布局到提升性能
【7月更文挑战第60天】在移动开发领域,一个流畅且响应迅速的应用程序是用户留存的关键。针对Android平台,开发者面临的挑战包括多样化的设备兼容性和性能优化。本文将深入探讨如何通过改进布局设计、内存管理和多线程处理来构建高效的Android应用。我们将剖析布局优化的细节,并讨论最新的Android性能提升策略,以帮助开发者创建更快速、更流畅的用户体验。
81 10
|
2月前
|
算法 JavaScript Android开发
|
7月前
|
传感器 安全 Android开发
探索iOS与安卓应用开发的性能差异
在移动操作系统领域,iOS和安卓的较量从未停歇。本文将深入探讨两大平台在应用开发中的性能表现,揭示它们各自的优势与局限。通过对比分析,我们将理解开发者如何在这两个不同的生态系统中做出权衡,以及这些选择如何影响最终用户的体验。
41 0
|
4月前
|
Android开发 开发者 索引
Android实战经验之如何使用DiffUtil提升RecyclerView的刷新性能
本文介绍如何使用 `DiffUtil` 实现 `RecyclerView` 数据集的高效更新,避免不必要的全局刷新,尤其适用于处理大量数据场景。通过定义 `DiffUtil.Callback`、计算差异并应用到适配器,可以显著提升性能。同时,文章还列举了常见错误及原因,帮助开发者避免陷阱。
373 9
|
4月前
|
安全 Android开发 数据安全/隐私保护
安卓与iOS的对决:移动操作系统的性能与创新
在当今智能手机市场,安卓和iOS两大操作系统一直处于竞争状态。本文将深入探讨它们在性能、安全性和用户体验方面的不同,并分析这些差异如何影响用户的选择。
70 3
|
4月前
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
99 0
|
6月前
|
安全 Android开发 Kotlin
Android经典面试题之Kotlin延迟初始化的by lazy和lateinit有什么区别?
**Kotlin中的`by lazy`和`lateinit`都是延迟初始化技术。`by lazy`用于只读属性,线程安全,首次访问时初始化;`lateinit`用于可变属性,需手动初始化,非线程安全。`by lazy`支持线程安全模式选择,而`lateinit`适用于构造函数后初始化。选择依赖于属性特性和使用场景。**
190 5
Android经典面试题之Kotlin延迟初始化的by lazy和lateinit有什么区别?
|
5月前
|
数据库 Android开发 开发者
打造高效安卓应用:从代码优化到性能提升
【8月更文挑战第2天】在移动设备的海洋中,安卓应用的效能直接关系到用户体验的好坏。本文旨在深入探讨如何通过代码层面的优化技巧和策略来提升安卓应用的性能。我们将一起探索减少内存消耗、避免不必要的CPU使用以及提高应用响应速度的方法。文章将结合具体的代码示例,为开发者提供可行的优化建议,帮助他们构建更流畅、更高效的安卓应用。
74 2
|
6月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
【7月更文挑战第28天】在 Android 开发中, NDK 让 Java 与 C++ 混合编程成为可能, 从而提升应用性能。**为何选 NDK?** C++ 在执行效率与内存管理上优于 Java, 特别适合高性能需求场景。**环境搭建** 需 Android Studio 和 NDK, 工具如 CMake。**JNI** 构建 Java-C++ 交互, 通过声明 `native` 方法并在 C++ 中实现。**实战** 示例: 使用 C++ 计算斐波那契数列以提高效率。**总结** 混合编程增强性能, 但增加复杂性, 使用前需谨慎评估。
164 4

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等