启动的服务我使用的是服务,发挥广播,当应用程序在后台运行。我的应用包含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