所以,我是在一个单独的线程中播放音乐.如果我离开应用程序(onPause(),onStop()被调用等),音乐将继续播放,但最终 - 打开其他应用程序并在它们之间切换并返回主屏幕 - 我的应用程序被杀死.没有崩溃,只是一个WIN DEATH和process com.myapp.android has died在logcat中.显然,系统为了回收资源而销毁应用程序是合法的.
我的问题是:在主(UI)线程的线程中运行东西是否意味着它现在具有较低的优先级,就系统而言?这意味着,它是否比我在运行媒体播放器Service甚至用于startForeground()使服务在前台运行更可能被杀死?
任何想法或澄清将不胜感激!
编辑
此外,部分服务文档让我感到困惑.在相关部分,它指出:
警告:服务在其托管进程的主线程中运行 - 该服务不会创建自己的线程,也不会在单独的进程中运行(除非您另行指定).这意味着,如果您的服务要进行任何CPU密集型工作或阻止操作(例如MP3播放或网络),您应该在服务中创建一个新线程来完成这项工作.
我总是在主线程的服务中运行MP3播放,并且UI保持响应.如果我应该把它放在上面引文中推荐的一个单独的线程中,那么我最终不会回到我开始的地方,即主要线程发生媒体播放,从而增加了回放的可能性打开其他应用程序等时被杀?
这里的教程解释了服务实际上使用主线程.所以它prepareAsync用来避免阻止UIS:http:
//developer.android.com/guide/topics/media/mediaplayer.html#asyncprepare
我想知道异步回调onPrepared在哪里运行.在示例中onPrepared调用start MediaPlayer.是否也是一个CPU密集型方法?如果它在同一个线程中运行,它也会阻塞.