啓動的服務我使用的是服務,發揮廣播,當應用程序在後臺運行。我的應用包含4個廣播頻道。所以我用了一個viewpager。當我輕掃時,我的應用程序響應正常。但是當我快速滑動時,我的應用程序沒有響應&我收到一個ANR對話框。根據文檔,服務作爲單獨的線程運行。所以它不應該阻止我的應用程序。但爲了安全起見,我在異步任務中添加了服務。但仍然是同樣的問題。我在Nexus 5設備上測試過它。但是當我在模擬器上運行應用程序(Nexus 5-lollypop)時。它完美的作品。那麼可能是什麼問題?有沒有人面臨類似的問題。 這是我開始我的服務:獲取ANR對話框,而在棒糖
private void playRadio() {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
if (getUserVisibleHint()) {
if (PreferencesManager.getInstance(getActivity()).isLiveRadioPlaying())
stopRadio();
Log.d("Visible", "");
Intent intent = new Intent(getActivity(), LiveRadioService.class);
intent.setAction(ACTION_START);
intent.putExtra(RADIO_URL, mRadioUrl);
intent.putExtra(RADIO_TITLE, mSectionTitle);
intent.putExtra(LIVE_RADIO_SECTION_POSITION, mSectionPos);
getActivity().startService(intent);
}
return null;
}
}.execute();
}
Preparing the media player inside asynctask:
private void playRadio() {
new AsyncTask<Void,Void,Void>(){
@Override
protected Void doInBackground(Void... voids) {
try {
cancelNotification();
mMediaPlayer.stop();
mMediaPlayer.reset();
mMediaPlayer.setDataSource(mUrl);
mMediaPlayer.prepareAsync();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute();
}
我解決我的問題做密集或阻塞操作。當媒體播放器處於準備狀態時,如果我嘗試重置媒體播放器,則媒體播放器不響應。因此,得到ANR。所以我在等待媒體播放器完全準備,然後在url不同的情況下重置媒體播放器。這解決了我的問題,並沒有得到ANR了。 – 2015-05-18 07:10:38