Android MediaPlayer 卡在prepare() 中

2024-03-17

我遇到了一个严重的问题,媒体播放器(MP)卡在prepare()方法。 我的应用程序运行prepare() in an AsyncTask以避免阻塞 UI,因为来源来自网络。有几个“播放”按钮用户可以随时单击,因此我添加了prepare()在同步方法中可以更好地控制 MP 的状态。我的应用程序还调用release()onPause 释放已使用的资源。

问题是,我注意到如果release()准备时被调用,prepare()永远不会返回,所以我陷入了同步方法中。最糟糕的是AsyncTask线程处于死锁状态,每次用户在该状态下单击播放时,都会浪费另一个线程,因为它一直在等待获取拥有永不返回的监视器prepare()。很快我所有的AsyncTasks线程被浪费了,由于我广泛使用它们,我的应用程序停止工作。

所以我的问题是:有人知道如何克服这个问题吗?我正在认真考虑使用 MediaPlayer 重做所有工作,但我需要事先知道处理此类情况的最佳方法。


你应该使用prepareAsync()反而。而且你不需要AsyncTask只是为了MediaPlayer准备。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android MediaPlayer 卡在prepare() 中 的相关文章

随机推荐

  • 嵌套循环、内循环并行化、重用线程

    免责声明 以下示例只是一个快速理解问题的虚拟示例 如果您正在考虑现实世界的问题 请考虑任何动态编程 问题 我们有一个 n m 矩阵 我们想要复制前一行的元素 如以下代码所示 for i 1 i lt n i for j 0 j lt m j
  • Erlang 记忆的简单示例

    假设您有一个简单的函数 对于较大的值来说 它的成本可能会相当高 fact 0 gt 1 fact N gt N fact N 1 在哪里可以找到使用缓存 或记忆 函数值的简单示例dets 任何其他方便记忆的方法都将受到高度赞赏 根据您的情况
  • symfony2 表单复选框分组(扩展和多项选择)

    在我的表单类型中我有这个 builder gt add options choice choices gt choices multiple gt true expanded gt true label gt false 选择是一个数组 c
  • 为什么SQL不支持“= null”而不支持“is null”?

    我不是在问if确实如此 我知道事实并非如此 我很好奇原因 我已阅读过诸如此之类的支持文档关于在 MySQL 中使用 Null 值 http dev mysql com doc refman 5 0 en working with null
  • Eclipse 打开空白工作区

    我什至不知道在哪里寻找这个问题 发生的情况是 当我打开 Eclipse 时 它 会打开一个空白工作区 然后我必须切换到当前的 现在每次打开 Eclipse 都会发生这种情况 知道我应该在哪里解决这个问题吗 日食朱诺 看看 eclipse安装
  • 为转译而构建的抽象(编程)语言

    介绍 我经常遇到这样的情况 库是用特定的编程语言编写的 这很好 如果我想以同一种语言使用该库 但如果我想使用不同的语言 这将是一个问题 这并不意味着可能存在或多或少的 hacky 方式 对于某些库 我感觉它们是用特定的编程语言编写的 只是因
  • 如何使用 markdown 按顺序编写两个单独的块引用?

    我需要按顺序放置两个块引用 但是 markdown 将它们组合成一个块引用 我能让它们分开的唯一方法是在它们之间放置一些垃圾文本 由于此文本字段允许我使用 Markdown 因此我可以演示 gt First Quote gt Second
  • 如何从 Emacs 中的混乱情况中恢复?

    我刚刚开始使用 Emacs 有时我会尝试一些东西 当我完成实验时 我想返回到我正在编辑的缓冲区 但我不知道如何做 更糟糕的是 有时我不小心敲到了一个键 甚至不知道我敲到了什么 在 Vim 中 我只需按 ESC 即可恢复 Emacs中有没有类
  • 指定 Random.nextInt() 的最大值和最小值? [复制]

    这个问题在这里已经有答案了 可能的重复 Java 生成一定范围内的随机数 https stackoverflow com questions 363681 java generating random number in a range 我
  • 从 Jest 到 stdout 再到 GitLab 的代码覆盖率

    我正在 GitLab CI 中运行代码覆盖率的玩笑测试 GitLab 从 gitlab 中运行程序的标准输出捕获百分比 jest coverage在 stdout 中生成覆盖范围 并且 gitlab 使用以下命令捕获它 All files
  • 从javascript中的字符串中提取带有“=”的变量的最佳方法是什么

    我想从这样的字符串中提取变量名称 foo valor bar second 等等 回来 foo valor bar second 您可以使用正则表达式展望 https www regular expressions info lookaro
  • Cassandra 时间序列数据模型

    我正在研究用于存储时间序列的 Cassandra 数据模型 我是 Cassandra 新手 我有两个应用程序 日内股票数据和传感器数据 股票数据将以一分钟的时间分辨率保存 七个数据字段构建一个时间范围 符号 日期时间 开盘价 最高价 最低价
  • 如何测试两个时间范围是否重叠?

    我需要实现预订功能并确保预订不会在 Rails 应用程序中重叠 The cover and between 方法不太符合我的需要 与同一模型上的其他潜在范围相比 我必须确保时间范围的唯一性 并高效地做到这一点 我认为可以使用overlaps
  • Python:Ascii字符<->十进制表示转换

    您好 我需要能够将 ascii 字符转换为其十进制等效字符 反之亦然 我怎样才能做到这一点 num ord char char chr num 例如 gt gt gt ord a 97 gt gt gt chr 98 b 您可以阅读有关 P
  • 添加不存在的订单元数据以扩展 WooCommerce 管理订单对特定产品的搜索

    继我之前的问题之后 我还有一个问题 添加不存在的订单元数据以扩展 WooCommerce 管理订单搜索 https stackoverflow com questions 77206771 add unexisting order meta
  • 读已提交隔离级别是否会导致死锁(Sql Server)?

    我的理解deadlocks是 两个进程试图争夺同一资源 通常是两个进程试图 写入 同一行数据 如果一个进程所做的只是读取数据 而另一个进程正在更新数据 那么这怎么会是资源争用呢 然而 在我们的数据库中 它被设置为默认事务级别ReadComm
  • 如何禁止取消选择 ListView 中的项目?

    I ve got
  • 如何在不进行字符串转换的情况下计算整数中的数字?

    我担心这个问题有一个简单而明显的答案 我需要确定物品计数的位数 以便我可以用minimum保持对齐所需的前导零的数量 例如 如果总数 一种解决方案是将项目计数转换为字符串 然后计算字符数 哎呀 有没有更好的办法 编辑 我不会想到使用常用对数
  • 执行“docker Push”时 gcloud ping 尝试失败

    我运行了以下命令 gcloud preview docker push gcr io project name an image 我收到以下错误 有谁知道我如何解决这个问题或者这意味着什么 我所做的只是遵循标准示例只是为了了解它是如何工作的
  • Android MediaPlayer 卡在prepare() 中

    我遇到了一个严重的问题 媒体播放器 MP 卡在prepare 方法 我的应用程序运行prepare in an AsyncTask以避免阻塞 UI 因为来源来自网络 有几个 播放 按钮用户可以随时单击 因此我添加了prepare 在同步方法