2015-02-09 34 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