MediaPlayer setDataSource 需要最佳实践建议

2023-11-22

看完之后 ”媒体播放" and "媒体播放器“ android 文档我仍然很困惑,需要有经验的建议设置数据源重载方法。

我在用MediaPlayer in a Service我的项目中的组件将是前台服务播放音乐时。我的音乐文件(.mp3)位于res/raw我的apk的文件夹。 要开始播放,我知道我必须准备 MediaPlayer 对象。因为 Android 应用程序中的服务默认使用单进程和主线程,所以我不希望我的用户得到ANR当 MediaPlayer 自行准备时(考虑原始文件夹中的媒体文件是否很大)。 然后我用prepareAsync代替prepare(同步)。所以我不能使用:

mp = MediaPlayer.create(context, R.raw.myfile);

因为这已经调用了prepare()内部但不是prepareAsync()。 所以基本上我有两个选择(四个中的两个):

Uri myUri = Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.myfile);
mp.setDataSource(context, myUri);

or

AssetFileDescriptor afd = context.getResources().openRawResourceFd(R.raw.myfile);
mp.setDataSource(fd.getFileDescriptor());
afd.close();

使用其中之一后我可以简单地使用:

mp.prepareAsync();

最后我的问题是“包括这些不同的方法,哪一种是最好的选择?其中一种比另一种有什么好处吗?我错过了什么吗?”


各种调用方式并没有任何实际好处create or setDataSource。静态的create方法除了调用之外没有做更多的事情setDataSource and prepare。各种种类setDataSource方法在内部相互调用。最终它们归结为两种可能的本机调用,一种使用描述远程 URI 的字符串,另一种使用本地文件描述符。自己创建文件描述符可能会带来非常轻微的性能优势,但在上下文中不会明显。

对于本地文件播放,正如您在代码中演示的那样,只需调用prepare(或静态create方法)根本不是一个坏习惯。无论文件大小如何,底层播放器都应该可以毫无问题地确定相关元数据并快速返回。这prepareAsync方法对于网络流更有用,其中任何数量的情况都可能导致一些意外的延迟。如果您正在设计通用播放器,那么使用prepareAsync方法将是可行的方法,但如果您只是玩原始资产,那么它应该没有任何区别。提供的各种方法只是为了方便(请注意 javadoccreate).

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

MediaPlayer setDataSource 需要最佳实践建议 的相关文章

随机推荐

  • 嵌入式(ASP.NET)网络服务器[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找适用于 NET 的轻量级可嵌入 Web 服务器 我需要它来伪造 SOAP Web 服务以进行自动化测试 因此如果它支持 ASP NET W
  • jQuery Ajax 到 asp.net asmx Web 服务抛出请求格式无效:application/json

    我让 jquery 使用整数调用 asp net web 服务 在我们移植到 net 4 0 的旧应用程序上 我无法让此调用正常工作 我可以调用一个没有参数的方法 但将数据发送到 Web 方法会返回以下错误 System InvalidOp
  • 如何在 Android 设备中检测来电?

    我正在尝试制作一个应用程序 例如当电话打来电话时我想检测号码 以下是我尝试过的方法 但它没有检测到来电 我想运行我的MainActivity在后台 我该怎么做 我已给予许可manifest file
  • 我应该如何构建一个简单的 ASP.NET MVC 应用程序?

    我一直在阅读一些有关 ASP NET MVC SOLID 等的内容 并且正在尝试为中小型 ASP NET MVC 应用程序找出一个简单的 秘诀 将这些概念整合在一起 我最关心的问题是控制器过于复杂 就像网络表单中的代码隐藏文件 其中包含所有
  • Cython 和 fortran - 如何在没有 f2py 的情况下一起编译

    最终更新 这个问题是关于如何写一个setup py这将编译一个 cython 模块 该模块可以像 C 一样直接访问 FORTRAN 代码 这是一个相当漫长而艰巨的解决方案旅程 但完整的混乱情况包含在下面作为上下文 原问题 我有一个扩展 它是
  • 无论系统是32位还是64位,int都是32位,long还是64位吗?

    在java中 无论体系结构是32位还是64位 int是否保证始终为32位大小和long为64位大小 Java 是平台无关的 所以int是 32 位 并且long是 64 位的
  • Android 开关 - 在开/关时更改开关背景

    does someone know how I can implement a switch like this in my application 或者如何更改标准开关打开 关闭时的背景颜色 以下是供您开始使用的示例 XML
  • 在泽西岛从 1.9 升级到 Jackson 2.0 不起作用

    我正在使用 Jackson 位于泽西岛 来序列化实体 并且我正在从 Jackson 1 9 迁移到 2 0 我跟着本指南 一开始似乎一切都很顺利 但仔细观察发现 Jackson 1 9 仍在用于序列化我的响应 因此忽略了我的 迁移的 Jac
  • 如何计算沿直线的镜像点?

    在二维平面中 我有一个点和一条线 如何获得沿着这条线的镜像点 当在计算机程序中完成类似的事情时 您可能需要处理的问题之一是仅使用整数算术 或尽可能多 来执行这些计算 假设输入是整数 尽可能以整数进行此操作是一个单独的问题 我不会在这里讨论
  • 如何获取子进程的完整返回值?

    我需要捕获子进程的返回值 问题是 使用等待进程 函数我只能捕获返回值的8位 WEXITSTATUS wstatus 返回子进程的退出状态 这包括 孩子状态参数的最低有效 8 位 在对 exit 3 或 exit 2 的调用中指定或作为参数指
  • 如何使用“sum(iterable,[])”展平嵌套列表? [复制]

    这个问题在这里已经有答案了 我正在使用Python 3 6 我遇到了以下方法来展平嵌套列表sum a 1 2 3 4 5 6 sum a 返回 1 2 3 4 5 6 这里究竟发生了什么 Sum 接受一个可迭代对象 在本例中是一个列表 和一
  • Python 中两个范围列表的交集

    我的一个朋友向我传递了他最近收到的一个面试问题 我对我的解决方案不太满意 问题如下 你有两个清单 每个列表将包含长度为 2 的列表 表示一个范围 即 3 5 表示从 3 到 5 含 的范围 您需要返回集合之间所有范围的交集 如果我给你 1
  • 在 Android 上从 gcm 迁移到 fcm

    我想在 Android 应用程序中从 gcm 迁移到 fcm 我是否需要从 gcm 向 Android 应用程序的老用户发送推送通知 或者我可以通过服务器的新 fcm 发送通知 FCM 工作正常我可以通过 fcm 在我的设备上接收推送通知
  • 不构建核心库时不明智或错误地使用核心类(java.* 或 javax.*)

    当我清理项目时 出现以下错误 2011 10 05 13 47 53 The Basics Dx trouble processing java nio CharBuffer class Ill advised or mistaken us
  • Python:重载特定类型的运算符

    我希望能够让我的类的运算符以我定义的方式与常规类型进行交互 比方说 我有 class Mynum object def init self x self x x def add self other return self x other
  • 如果出现平局,Python 会选择哪个最大值?

    当使用max Python 中的函数查找列表 或元组 字典等 中的最大值 并且最大值存在并列 Python 选择哪一个 是随机的吗 例如 如果一个人有一个元组列表并且一个人选择一个最大值 使用key 基于元组的第一个元素 但有不同的第二个元
  • React 组件中的 Children 属性

    我现在正在学习反应 这是代码的链接 http redux js org docs basics ExampleTodoList html 我有点难以理解这部分代码中发生的事情 const Link active children onCli
  • 强制 JSON.stringify() 发出 NaN / Infinity 或这样做的 JS JSON 库

    我正在研究向使用 JSONRPC 进行客户端 服务器交互的现有科学应用程序添加 NaN Infinity 支持的可行性 许多 JSON 库确实处理 在某些情况下可选 NaN 和 Infs 例如 Python json读取和写入 Java J
  • Java 使用实例方法而不是类/静态方法为每个实例化对象创建唯一 ID

    对此相当陌生 所以我希望标题中的术语正确 我想弄清楚如何创建一个实例方法这将执行以下操作 返回一个ID号 由于每个对象都是从类构造函数创建的 实例化 因此会为其分配一个唯一的整数 ID 号 第一个 ID 号是 1 当实例化新对象时 将分配连
  • MediaPlayer setDataSource 需要最佳实践建议

    看完之后 媒体播放 and 媒体播放器 android 文档我仍然很困惑 需要有经验的建议设置数据源重载方法 我在用MediaPlayer in a Service我的项目中的组件将是前台服务播放音乐时 我的音乐文件 mp3 位于res r