• Stars
    star
    167
  • Rank 225,869 (Top 5 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 4 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

一个使用ASM进行字节码插桩的大图监控框架

LargeImageMonitor

logo

Download GitHub release (latest by date) GitHub

背景

在平时开发中,我们经常会出现OOM和APK体积过大的情况,其中有很大的原因在于图片过大。当图片占用内存过大,内存不足时就会导致OOM。而图片的文件太大,会导致在打包成APK后,APK的体积增加。对于本地加载的图片,UI给我们图时,我们或许会下意识看一眼文件大小,如果文件太大我们可能会跟UI小姐姐进行沟通。但是对于从网络加载图片,很多时候客户端拿到的只是一个URL,我们并不知道要加载的图片大小,这时候就有可能造成图片过大的情况。

介绍

LargeImageMonitor是一个使用ASM进行字节码插桩的大图监控框架,可以对我们要加载的图片进行监控,如果出现图片超过阈值的情况会进行报警。

功能与特点

    1.支持Glide,Fresco,Picasso,Universal Image Loader。

    2.可以对图片的文件大小设置阈值。

    3.可以对图片所占用的内存大小设置阈值。

    4.可以通过弹窗或者列表的方式查看超过阈值的图片。

    5.可以为Okhttp添加全局的应用监听器和网络监听器(包括第三方使用到的okhttp也会添加上)。

    6.可以为Okhttp添加全局的自定义DNS,方便实现HTTPDNS(包括第三方使用到的okhttp也会添加上)。

    6.支持Androidx。

效果

快速接入

1.在根目录的build.gralde中添加如下代码:

buildscript {
    //添加jcenter
    repositories {
        jcenter()
    }
    //添加插件classpath
    dependencies {
       classpath 'org.zzy.largeimage:large-image-monitor-plugin:1.0.0'
    }
}

2.在要使用的模块的build.gradle中添加如下代码:

//添加使用插件
apply plugin: 'largeimage-monitor'
//添加依赖库
implementation 'org.zzy.lib.largeimage:large-image-monitor:1.0.0'

3.在Application类中初始化框架:

//初始化大图监控
        LargeImage.getInstance()
        .install(this)//一定要调用该方法进行初始化
        .setFileSizeThreshold(400.0)//设置文件大小阈值单位为KB (可选)
        .setMemorySizeThreshold(100)//设置内存占用大小阈值单位为KB (可选)
        .setLargeImageOpen(true)//是否开启大图监控,默认为开启,如果false,则不会在大图列表和弹窗显示超标图片 (可选)
        .addOkHttpInterceptor(new CustomGlobalInterceptor())//添加OKhttp自定义全局应用监听器 (可选)
        .addOkHttpNetworkInterceptor(new CustomGlobalNetworkInterceptor())//添加Okhttp值得你故意全局网络监听器 (可选)
        .setDns(new CustomHttpDns);//设置自定义的全局DNS,可以自己实现HttpDns (可选)

4.记得打开浮窗权限

支持版本

  • Glide:(v4.10.0 - v4.11.0)
  • Fresco:(v0.1.0 - v2.2.0)
  • Picasso:(v2.4.0 - v2.71828)
  • ImageLoader:(v1.9.1 - v1.9.5)
  • Okhttp:(v3.0.0 - v3.14.7)

TodoList

  • 对各大框架进行版本兼容。
  • 得到View的尺寸。

Change Log

v1.0.0 (2020/4/15)

  • 项目初始化实现基本功能

原理分析

鸣谢

License

Apache 2.0