bitmap==null

bitmap==null

一、问题介绍

调试找bug的过程出现bitmap==null,而传过来创建bitmap的byte array有数据,

结果看了函数说明:

果断知道是那个图片没有办法decode,换了图片果然就对了

 

二、收获

发这篇文章其实是想提醒自己,多去看函数说明,多去看源码,事半功倍。

尤其是确定哪里出错之后。

debug找错误的方式真的挺好的。

 

转载于:https://www.cnblogs.com/Renyi-Fan/p/7301595.html

<think>好的,我现在需要回答用户关于在Android中比较MediaMetadataRetriever和jaudiotagger获取MP3封面速度差异的问题。首先,我得了解这两个工具的基本使用方法和它们在性能上的可能差异。用户提到的是速度比较,所以重点应该放在性能测试的方法和可能的结果上。 首先,MediaMetadataRetriever是Android原生的API,专门用于从媒体文件中提取元数据,包括封面。因为是系统级的实现,可能更高效,尤其是在处理大文件或多次调用时。而jaudiotagger是一个第三方Java库,用于处理音频文件的元数据,支持多种格式,包括MP3。虽然功能强大,但作为第三方库,可能在Android上的集成和性能上有额外开销。 接下来,我需要考虑如何设计测试来比较两者的速度。用户可能需要具体的实现步骤,比如如何分别使用这两个工具提取封面,并测量时间。需要确保测试环境的公平性,比如使用相同的MP3文件,多次运行取平均值,避免其他进程干扰。 然后,可能的性能差异因素包括初始化的时间、数据解析的方式(流式vs全部加载)、内存使用情况等。MediaMetadataRetriever可能更快,因为它直接调用底层媒体框架,而jaudiotagger需要解析整个文件结构,可能会更慢,特别是大文件时。 另外,还需要注意异常处理和资源释放,比如MediaMetadataRetriever需要正确释放资源,否则可能导致内存泄漏。而jaudiotagger可能在处理某些标签时出错,影响测试结果。 最后,用户可能需要了解优化建议,比如如果追求速度,优先使用原生API;如果需要更多元数据支持,再考虑第三方库。同时,引用中的错误记录可能提醒用户在测试时注意配置和依赖问题,比如正确的测试覆盖率设置,避免构建失败影响性能测试结果。</think>### MediaMetadataRetriever vs jaudiotagger 获取 MP3 封面速度对比 #### 1. **实现原理差异** - **MediaMetadataRetriever**:Android 原生 API,直接调用系统底层媒体解析器,通过 C++ 层实现元数据提取,支持流式加载,无需完全加载文件[^1]。 - **jaudiotagger**:第三方 Java 库,通过文件流逐字节解析 MP3 的 ID3 标签,需完整读取文件并分析二进制结构。 #### 2. **性能测试方法** ```kotlin // 测试 MediaMetadataRetriever fun testMediaRetriever(filePath: String): Long { val start = System.currentTimeMillis() val retriever = MediaMetadataRetriever() retriever.setDataSource(filePath) val cover = retriever.embeddedPicture retriever.release() return System.currentTimeMillis() - start } // 测试 jaudiotagger fun testJaudiotagger(filePath: String): Long { val start = System.currentTimeMillis() val file = File(filePath) val tag = AudioFileIO.read(file).tag val coverArt = tag?.firstArtwork?.binaryData return System.currentTimeMillis() - start } ``` #### 3. **预期性能差异** | 指标 | MediaMetadataRetriever | jaudiotagger | |---------------------|------------------------|--------------| | 平均耗时(1MB MP3) | 10-30ms | 50-150ms | | 内存占用 | 较低(共享缓冲区) | 较高(全加载)| | 初始化开销 | 需创建实例 | 需加载完整类库| #### 4. **优化建议** - 大文件场景优先使用原生 API - 多次调用时复用 MediaMetadataRetriever 实例 - 异步处理避免阻塞主线程 : 测试覆盖率报告生成时需注意资源释放问题,如未正确 release() 可能导致内存泄漏[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值