我正在尝试创建简单的Android应用程序来播放SD卡中的音频文件 理解服务时遇到一些问题。 我将具体,这是我的问题。
MediaPlayer
类?在后台服务或UI线程中。对于在UI线程上运行的绑定服务,如果它在UI线程上运行,则创建服务绑定等没有任何意义吗?仅在我们想要在活动(或任何UI组件被破坏)的情况下继续在后台播放音乐的情况下,但在这种情况下,即使用户无法看到UI,MusicPlayer也会占用整个UI线程。我是对的吗?IBinder
类直接进行服务,而这只是返回服务实例。 请解释这个主题。 我将不胜感激任何帮助。 感谢。
答案 0 :(得分:0)
Android MediaPlayer背后的一个棘手问题是,有许多实现的行为略有不同。尽管如此,界面很常见,所以我们可以谈论这个问题。除了prepare
之外,可以从UI线程调用所有MediaPlayer生命周期方法。为了简化操作,有prepareAsync
方法,可以从UI线程调用。
在内部,MediaPlayer应该与音频系统进行交互,以便在任何情况下都不会在调用线程上进行解码和回放。
可以在另一个线程上创建MediaPlayer
。但是,如the documentation中所述,该线程必须有自己的Looper
(UI线程具有)。因此,不应在异步任务中创建MediaPlayer
。
顺便说一下,我在主线程上调用start
方法时注意到了偶尔的ANR(这会让我发到你的帖子)。然而,这些非常罕见。