2015-02-09 53 views
0

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

    } 
+0

我解决我的问题做密集或阻塞操作。当媒体播放器处于准备状态时,如果我尝试重置媒体播放器,则媒体播放器不响应。因此,得到ANR。所以我在等待媒体播放器完全准备,然后在url不同的情况下重置媒体播放器。这解决了我的问题,并没有得到ANR了。 – 2015-05-18 07:10:38

回答

0

按照该文件建立,服务作为一个单独的线程中运行。

不是真的

因为Service总是在应用程序,但工作者线程的同一进程中运行所使用的IntentService处理接收到的意图。

我得到一个ANR对话框主线程

也许服务做一些与网络相关的工作或API调用。

为了防止ANR对话框启动单独的线程中,或使用AsyncTaskIntentService在服务

+0

我尝试使用异步任务..但仍然是同样的问题。在服务中,我使用媒体播放器。它是媒体播放器吗?并且它在模拟器中工作得很完美 – 2015-02-09 04:34:27

+0

@AmandaFernandez:带有网址的MediaPlayer可能会导致问题,所以使用MediaPlayer.setDataSource,MediaPlayer.prepare();的AsyncTask – 2015-02-09 04:37:35

+0

@AmandaFernandez里面方法:请出示带有的AsyncTask – 2015-02-09 04:37:50