当前位置: 首页 > news >正文

解决MediaMetadataRetriever.finalize()超时问题

文章目录

  • 问题
  • 解决方案
    • 1.忽略TimeoutException异常
    • 2.接入Booster插件
  • 参考

问题

媒体对象关闭超时

Caused by: java.util.concurrent.TimeoutException:
android.media.MediaMetadataRetriever.finalize() timed out after 10
seconds

解决方案

1.忽略TimeoutException异常

滴滴出行安卓端 finalize time out 方案

总结:

  • 手动修改finialize()超时时间
    • 不可行,超时时间为静态常量,在编译期就会被替换成常量,运行期修改不生效。
  • 手动停掉FinalizerWatchdogDaeman线程
    • 接入 滴滴Booster质量优化框架
  • 忽略超时异常,如下:
 1public class RuntimeInit {
 2    ...
 3   private static class UncaughtHandler implements Thread.UncaughtExceptionHandler {
 4       public void uncaughtException(Thread t, Throwable e) {
 5           try {
 6                ...
 7               // Bring up crash dialog, wait for it to be dismissed 展示APP停止运行对话框
 8               ActivityManagerNative.getDefault().handleApplicationCrash(
 9                       mApplicationObject, new ApplicationErrorReport.CrashInfo(e));
10           } catch (Throwable t2) {
11                ...
12           } finally {
13               // Try everything to make sure this process goes away.
14               Process.killProcess(Process.myPid()); //退出进程
15               System.exit(10);
16           }
17       }
18   }
19
20    private static final void commonInit() {
21        ...
22        /* set default handler; this applies to all threads in the VM */
23        Thread.setDefaultUncaughtExceptionHandler(new UncaughtHandler());
24        ...
25    }
26}

主动忽略FinializerWatchdogDaemon出现TimeoutException的异常,阻断UncaughtExceptionHandler链式调用,减少用户影响。

2.接入Booster插件

核心思路 在应用启动后,停掉 FinalizerWatchdogDaemon 线程

Booster指南
Booster仓库

  • 接入版本
    在这里插入图片描述

  • 在根目录 build.gradle 中接入插件

buildscript {
    ext.booster_version = '5.0.0'
    dependencies {
        classpath "com.didiglobal.booster:booster-gradle-plugin:$booster_version" // ① 
        // ② figure out the features you really need, then choose the right module for integration
        // ② 弄清楚真正需要的特性,然后从下面的模块列表中选择正确的模块进行集成
        classpath "com.didiglobal.booster:booster-transform-finalizer-watchdog-daemon:$booster_version"
        classpath "com.didiglobal.booster:booster-task-analyser:$booster_version"
    }
}
  • 在模块中引入,尽量放在application下面
apply plugin: 'com.android.application'
apply plugin: 'com.didiglobal.booster' 
  • 确认Booster是否启用
./gradlew assembleDebug --dry-run

搜索关键字transformClassesWithBoosterForDebug,说明已经启用

参考

深入理解Booster(一)-gradle插件开发如何兼容不同的agp版本

相关文章:

  • CUDA与GPU架构:解锁并行计算的终极奥义
  • 2025中国AI Agent 行业研究报告|附文件下载
  • 《TCP/IP网络编程》学习笔记 | Chapter 21:异步通知 I/O 模型
  • Charles抓HTTPS包
  • 调用百度api实现语音识别(python)
  • CLion Debug查看指针数组元素
  • Kubernetes(k8s)-Pod亲和性(Affinity)和反亲和性(Anti-affinity)
  • PAQ压缩算法
  • 自动驾驶系统的车辆动力学建模:自行车模型与汽车模型的混合策略及自动驾驶分层控制架构
  • 3.24-3 接口测试断言
  • 面试中如何回答性能优化的问题
  • C语言 【实现电脑关机小游戏】非常好玩
  • java实现coze平台鉴权+工作流调用(踩坑记录)
  • 大数据(2)Hadoop架构深度拆解:HDFS与MapReduce企业级实战与高阶调优
  • 在 Kubernetes 中部署 Trivy 漏洞扫描服务
  • 力扣DAY24 | 热100 | 回文链表
  • Apollo 相关知识点
  • DeepSeek组网的演进与效率提升
  • Categorical分布(分类分布):深度学习中的离散建模利器
  • 【嵌入式学习2】学生信息管理系统项目
  • 普京:“胜利日停火”已开始生效
  • 印方称若巴方决定升级局势,印方已做好反击准备
  • 水中托举救出落水孩童后遇难,42岁退役军人高武被确认为见义勇为
  • 吴清:加强监管的同时传递监管温度,尽力帮助受影响企业应对美加征关税的冲击
  • “五一”假期银联、网联共处理支付交易234.39亿笔
  • 被炒热的“高潮针”:超适应症使用,安全性和有效性存疑