ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – UI线程或背景中的Android音乐播放器

2019-07-11 12:03:29  阅读:183  来源: 互联网

标签:java android multithreading android-service music-player


我正在尝试创建简单的Android应用程序来播放SD卡中的音频文件.
理解服务时遇到一些问题.
我将具体,这是我的问题.

>默认情况下,服务在UI线程上运行,不是吗?只有当它在单独的进程中运行时,它才有另一个线程,以及上下文,因为它是系统中的另一个进程(虚拟机实例的分支)
> MediaPlayer类应该在哪里使用?在后台服务或UI线程中.对于在UI线程上运行的绑定服务,如果它在UI线程上运行,则创建服务绑定等没有任何意义吗?仅在我们想要在活动(或任何UI组件被破坏)的情况下继续在后台播放音乐的情况下,但在这种情况下,即使用户无法看到UI,MusicPlayer也会占用整个UI线程.我对吗 ?
>我已经找到了大量的教程如何创建简单的音频播放器,其中很少显示如何直接从服务运行在单独的线程中,其他只是直接服务于使用IBinder类的活动,而IBinder类只返回Service的实例.

请解释这个主题.
我将不胜感激任何帮助.
谢谢.

解决方法:

Android MediaPlayer背后的一个棘手问题是,有许多实现具有略微不同的行为.尽管如此,界面很常见,所以我们可以谈论这个问题.除了prepare之外,可以从UI线程调用所有MediaPlayer生命周期方法.为了简化操作,有一个prepareAsync方法,可以从UI线程调用.

在内部,MediaPlayer应该以一种在任何情况下在调用线程上不发生解码和回放的方式与音频系统交互.

可以在另一个线程上创建MediaPlayer.但是,如the documentation所述,该线程必须有自己的Looper(UI线程具有).因此,不应在异步任务中创建MediaPlayer.

顺便说一下,我在主线程上调用start方法时注意到了偶尔的ANR(这会把我带到你的帖子中).然而,这些是非常罕见的.

标签:java,android,multithreading,android-service,music-player
来源: https://codeday.me/bug/20190711/1432042.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有