java – UI线程或背景中的Android音乐播放器
作者:互联网
我正在尝试创建简单的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