2014-08-29 91 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