iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Android Bitmap Monitor图片定位功能怎么实现
  • 631
分享到

Android Bitmap Monitor图片定位功能怎么实现

2023-07-05 17:07:02 631人浏览 安东尼
摘要

本篇内容介绍了“Android Bitmap Monitor图片定位功能怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有

本篇内容介绍了“Android Bitmap Monitor图片定位功能怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    正文

    在日常工作中,我们往往只关注 Java 内存使用情况,这主要是因为 Java 内存分析相关的工具比较多。与之不同的是,图片内存分析的工具比较少,当分析图片内存问题时我们需要花费很大的精力。

    我们知道,在 Android 应用使用的内存中,图片总是占据不少比例。拿小米 12 来说,3200 x 1440 的分辨率,一张全屏的图片至少要占用 17MB(3200 x 1440 x 4 )。如果缓存里多几张,基本就要达到上百 MB。加载的图片稍有不当,就可能导致应用的内存溢出崩溃大大增加。

    因此,我们需要这样的工具:可以快速发现应用内加载的图片是否合理,比如大小是否合适、是否存在泄漏、缓存是否及时清理、是否加载了当前并不需要的图片等等。

    AndroidBitmapMonitor 正是为此而生!它是一个开源的 Android 图片内存分析工具,可以帮助开发者快速发现应用的图片使用是否合理,支持在线下和线上使用

    AndroidBitmapMonitor 提供了这些功能:

    • 获取内存中的 Bitmap 数量及占用内存

    • 查看 Bitmap 创建堆栈及线程

    • 导出 Bitmap 图片,帮助直接定位问题所属业务

    • 动态开关,可以在任意时间开始和结束

    功能介绍

    • 支持 Android 4.4 - 13 (api level 19 - 33)

    • 支持 armeabi-v7a 和 arm64-v8a

    • 支持线下实时查看图片内存情况 和 线上数据统计

    可以提供的功能:

    • 获取内存中的图片数量及占用内存

    • 获取 Bitmap 创建堆栈及线程

    • 全版本 Bitmap Preview,在堆栈无法看出问题时,可以用来定位图片所属业务

    使用文档

    主要有四步:

    • 添加 gradle 依赖

    • 初始化配置

    • 在需要的时候调用 start 和 stop

    • 获取数据

    1. 在 build.gradle 中增加依赖

    Android Bitmap Monitor 发布在 MavenCentral 上,因此首先需要确保您的项目有使用 mavenCentral 作为仓库。

    您可以在根目录的 build.gradle 或者 setting.gradle 中添加以下代码:

    allprojects {    repositories {        //...        //添加 mavenCentral 依赖        mavenCentral()    }}

    接着在具体业务的 build.gradle 文件中添加依赖:

    android {    packaginGoptions {        pickFirst 'liblibshadowhook.so' 是必要的。

    添加完依赖并执行 gradle sync 后,下一步就是在代码里进行初始化和启动。

    2. 初始化

    初始化需要调用的 API 是 BitmapMonitor.init

            long checkInterval = 10;        long threshold = 100 * 1024;        long restoreImageThreshold = 100 * 1024;;        String dir = this.getExternalFilesDir("bitmap_monitor").getAbsolutePath();        BitmapMonitor.Config config = new BitmapMonitor.Config.Builder()                .checkRecycleInterval(checkInterval)    //检查图片是否被回收的间隔,单位:秒 (建议不要太频繁,默认 5秒)                .getStackThreshold(threshold)           //获取堆栈的阈值,当一张图片占据的内存超过这个数值后就会去抓栈                .restoreImageThreshold(restoreImageThreshold)   //还原图片的阈值,当一张图占据的内存超过这个数值后,就会还原出一张原始图片                .restoreImageDirectory(dir)             //保存还原后图片的目录                .showFloatWindow(true)                  //是否展示悬浮窗,可实时查看内存大小(建议只在 debug 环境打开)                .isDebug(true)                .context(this)                .build();        BitmapMonitor.init(config);

    当 showFloatWindow 为 true 时,首次启动 app 需要授予悬浮窗权限。

    3. 开启和停止监控

    初始化完成后,可以在任意时刻调用 start/stop 开启和停止监控:

            //开启监控,方式1        BitmapMonitor.start();        //开启方式2,提供页面获取接口,建议使用        BitmapMonitor.start(new BitmapMonitor.CurrentSceneProvider() {            @Override            public String getCurrentScene() {                //返回当前顶部页面名称                if (sCurrentActivity != null) {                    return sCurrentActivity.getClass().getSimpleName();                }                return null;            }        });        //停止监控        BitmapMonitor.stop();

    上面的代码中,开启方式 2 的参数用来获取图片创建时的页面名称,这个接口可以帮助知道大图是在哪个页面创建的。如果不想提供这个接口可以使用开启方式 1。

    那我们该在什么使用开启监控呢?

    一般有「全局开启」和「分业务开启」两种使用方式:

    • 全局开启:一启动就 start,用于了解整个 APP 使用过程中的图片内存数据

    • 分业务开启:在进入某个业务前 start,退出后 stop,用于了解特定业务的图片内存数据

    4. 获取数据

    在初始化完成并开启监控后,我们就可以拦截到每张图片的创建过程。

    Android Bitmap Monitor 提供了两种获取内存中图片数据的 API:

    • 定时回调 addListener

    • 主动获取数据 dumpBitmapInfo

    定时回调 是指注册一个 listener,这个接口的回调会按照一定时间间隔被调用,可以用来做实时监控

            BitmapMonitor.addListener(new BitmapMonitor.BitmapInfoListener() {            @Override            public void onBitmapInfoChanged(final BitmapMonitorData data) {                Log.d("bitmapmonitor", "onBitmapInfoChanged: " + data);            }        });

    间隔时间是初始化时传递的参数 checkRecycleInterval,返回的数据结构如下所示:

    public class BitmapMonitorData {    //历史创建的总图片数    public long createBitmapCount;    //历史创建的总图片内存大小,单位 byte    public long createBitmapMemorySize;    //当前内存中还未回收的图片数    public long remainBitmapCount;    //当前内存中还未回收的图片内存大小,单位 byte    public long remainBitmapMemorySize;    //泄漏(未释放)的 bitmap 数据    public BitmapRecord[] remainBitmapRecords;    //...}

    主动获取数据 是指主动调用 BitmapMonitor.dumpBitmapInfo() 获取内存中的所有数据,可以用在内存升高时上报数据

            //获取所有数据        BitmapMonitorData bitmapAllData = BitmapMonitor.dumpBitmapInfo();        Log.d("bitmapmonitor", "bitmapAllData: " + bitmapAllData);        //仅获取数量和内存大小,不获取具体图片信息        BitmapMonitorData bitmapCountData = BitmapMonitor.dumpBitmapCount();        Log.d("bitmapmonitor", "bitmapCountData: " + bitmapCountData);

    dumpBitmapInfo 会返回内存中所有图片的信息,如果只想获取到图片的总数和内存总量,可以调用 dumpBitmapCount,速度更快更轻量。

    “Android Bitmap Monitor图片定位功能怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

    --结束END--

    本文标题: Android Bitmap Monitor图片定位功能怎么实现

    本文链接: https://www.lsjlt.com/news/353462.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Android Bitmap Monitor图片定位功能怎么实现
      本篇内容介绍了“Android Bitmap Monitor图片定位功能怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
      99+
      2023-07-05
    • Android 模拟地图定位功能的实现
      实现原理: 手机定位方式目前有4种: 基站定位WIFI定位GPS定位AGPS定位 本工程利用手机自带的"模拟位置"功能实现运行时修改LocationManager...
      99+
      2024-04-02
    • Android怎么实现图片排列功能
      要实现图片排列功能,可以使用RecyclerView来展示图片列表,并使用GridLayoutManager来实现图片的排列。首先,...
      99+
      2023-08-19
      Android
    • java地图定位功能怎么实现
      要实现Java地图定位功能,可以使用以下步骤:1. 使用Java地图库,如Google Maps API、Baidu Maps AP...
      99+
      2024-02-29
      java
    • Android中怎么实现图片识别功能
      本篇文章为大家展示了Android中怎么实现图片识别功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、界面我采用了一个SurfaceView用来显示摄像头的预览画面,重写了一个SurfaceVi...
      99+
      2023-05-30
      android
    • Android中怎么实现图片压缩功能
      Android中怎么实现图片压缩功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、图片质量压缩    public s...
      99+
      2023-05-31
      android
    • Android实现上传图片功能
      本文实例为大家分享了Android实现上传图片功能的具体代码,供大家参考,具体内容如下 设定拍照返回的图片路径 protected void image(String...
      99+
      2024-04-02
    • Android 自定义图片地图坐标功能的实现
      一、前言 最近项目要求实现一个在自定义地图图片上添加坐标信息的功能,类似于在图片做标注的功能。如下图所示。坐标的位置是相对于图片宽高的百分比 二、思路 改功能主要分为三个视图,1...
      99+
      2024-04-02
    • Android实现图片查看功能
      目录一、效果图二、支持功能三、核心实现方法3.1 缩放 Matrix.postScale(float sx, float sy, float px, float py)3.2 移动 ...
      99+
      2024-04-02
    • Android开发之GPS定位功能怎么实现
      要实现Android中的GPS定位功能,你可以按照以下步骤进行操作:1. 在AndroidManifest.xml文件中添加相应的权...
      99+
      2023-09-13
      Android
    • Android实现bitmap指定区域滑动截取功能
      突然不知道什么心态,说要做这个,网上找了半天没找到合适的,就自己做了一个。 先上效果图: 透明区域为将要截取的区域,其他阴影部位为舍弃区域 图片资源我写死储存在了raw中,有需要可以自己写获取bitmap。 界面layout:<Rel...
      99+
      2023-05-30
      android bitmap 截取
    • Android实现画中画功能(图片)
      简介: Android 8.0(API 级别 26)允许以画中画 (PIP) 模式启动 Activity。画中画是一种特殊类型的多窗口模式,最常用于视频播放。使用该模式,用户可以通过...
      99+
      2024-04-02
    • android保存图片到相册功能怎么实现
      要实现在Android应用中保存图片到相册的功能,可以按照以下步骤进行操作: 首先,确保应用已经获取了写入外部存储的权限。在And...
      99+
      2024-04-02
    • Android怎么实现图片预览与保存功能
      这篇“Android怎么实现图片预览与保存功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android怎么实现图片预览与...
      99+
      2023-06-30
    • Android自定义图片地图坐标功能的实现方法
      本篇内容主要讲解“Android自定义图片地图坐标功能的实现方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android自定义图片地图坐标功能的实现方法”吧!一、前言最近项目要求实现一个在自...
      99+
      2023-06-20
    • Android实现网络图片浏览功能
      我们在上网的过程中经常看到各种图片,那你知道它是如何实现的吗?接下来就让我们一块探讨一下。 网络图片的浏览可以分为俩部分,基本的页面布局与界面交互,让我们一步步的来编写。 基本布局很简单,只需要有一个输入图片链接的EditText,一个浏览...
      99+
      2023-05-31
      android 图片浏览 roi
    • 怎么用javascript实现定时改变图片功能
      这篇文章主要介绍了怎么用javascript实现定时改变图片功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用javascript实现定时改变图片功能文章都会有所收获,下面我们一起来看看吧。一、JavaS...
      99+
      2023-07-06
    • Android中怎么实现图片压缩与上传功能
      Android中怎么实现图片压缩与上传功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先需要对图片进行压缩,这方面可以使用第三方的库,我在实际的开发中使用的...
      99+
      2023-05-30
      android
    • 微信小程序地图定位功能怎么实现
      本篇内容主要讲解“微信小程序地图定位功能怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序地图定位功能怎么实现”吧!方法如下首先呢你要有一个方法去触发这个点击事件,下面已经写好啦,...
      99+
      2023-06-30
    • Android使用ViewFlipper实现图片切换功能
      今天给大家简单的讲一下Android手势,目前市场上的App中手势的运用比较少。 Android提供了两种手势: ①.Android提供了手势检测,并为手势检测提供了相应的监听器 ②.Android允许开发者添加手势,并提供了相应的API识...
      99+
      2023-05-30
      android viewflipper 图片切换
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作