2014-08-29 102 views
0

我正在构建应用程序以侦听acc流。我米使用这个库: https://code.google.com/p/aacdecoder-android/AsyncTask停止在背景上

尤其是这个球员。

PlayerCallback clb = new PlayerCallback() { ... }; 
MultiPlayer aacMp3Player = new MultiPlayer(clb); 
aacMp3Player.playAsync("http://..."); // URL of MP3 or AAC stream 

它扮演的AsyncTask,但是当你把应用中的一些smarphones到底色打只是停止。 只有在methond onDestroy我停止AsyncTask,而不是在onPause或oStop。

任何人都有一个想法,为什么玩家停止?

+0

过于笼统,尝试调用从一个新的线程 – shaydel 2014-08-29 09:02:54

+0

玩家见我的回答如下。此外,不建议您在AsyncTask中执行很长时间的运行操作。 Android目前正在将AsyncTask作为“一次一个”的模式。长时间运行的AsyncTask将阻止其他AsyncTasks在同一个池/进程中运行。我怀疑用一种叫做“playAsync”的方法在一个对象背后编程模型的目的是从UI线程中调用,并用自己的线程在后台播放。 – selbie 2014-08-29 09:24:41

回答

0

简短的回答:音乐流媒体应用需要有一个服务运行,以避免由Android被终止。

在更便宜的设备或内存资源低位运行,Android将只是当他们进入到了后台,或当需要更多的内存终止进程。这可能解释了为什么它只发生在你提到的“一些智能手机”上。您也可以使用手机上的开发者选项并使用“不保留活动”和“后台进程限制”设置来模拟相同的事情。

你可以阅读更多关于Android如何优先流程和活动结束时,他们没有在前台at this link here活跃APP。您会发现服务处于比后台进程更高的优先级(例如,用户退出但仍有运行线程的活动)。

在我的音乐流媒体应用程序,音乐响起的时候,我开始一个服务(同一个进程中的活动)和我的应用程序的主要活动添加到通知区域。当用户停止播放音乐时,我会停止该服务并从通知区域删除应用程序。您可能会注意到NPR App,Spotify,i-heart-radio和其他人之间的行为非常相似。

+0

谢谢..我会试试看! :)所以我应该把首发球员投入使用? – Lalson 2014-08-29 09:52:01

+0

您在技术上不需要将任何“在服务中”。您只需在用户离开主屏幕的活动之前启动服务。您可以稍后扩展您的服务以提供命令和界面来控制您的媒体播放器。这将为添加一个可以控制来自Android桌面的流的小部件打开大门。 – selbie 2014-08-29 16:19:11