2015-02-09 4 views
0

Я использую службу для воспроизведения радио, когда приложение работает в фоновом режиме. Мое приложение содержит 4 радиоканала. Поэтому я использовал viewpager. Когда я прокручиваю медленно, мое приложение отвечает правильно. Но когда я быстро сажусь, мое приложение не отвечает & Я получаю диалог ANR. Согласно документу, служба работает как отдельный поток. Поэтому он не должен блокировать мое приложение. Но чтобы быть на более безопасной стороне, я добавил службу в асинхронную задачу. Но все та же проблема. Я тестировал его на устройстве Nexus 5. Но когда я запускаю приложение на эмуляторе (Nexus 5-lollypop). Он работает отлично. Тогда в чем проблема? Кто-нибудь сталкивается с аналогичной проблемой. Это, как я начинаю свою службу:Получение диалога ANR при запуске службы в Lollypop

 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 больше. –

ответ

0

Согласно documentaion, служба работает как отдельный поток.

Не правда

Поскольку Service всегда выполняются в одном процессе применения, но рабочего потока используется IntentService к процессу получил Намерения.

Я получаю диалоговое ANR

Возможно Service делают некоторые связанные с сетевой работой или Api вызовы на основном потоке.

Для предотвращения ANR запуска диалогового окна отдельной темы или использовать AsyncTask, IntentService делать интенсивные или блокирующие операции в службе

+0

Я попытался использовать async task..Но все та же проблема. В сервисе, я использую медиаплеер ... Это сигнал медиа-плеера? И y отлично работает в эмуляторе –

+0

@AmandaFernandez: MediaPlayer с веб-url, вероятно, вызывает проблему, поэтому используйте MediaPlayer.setDataSource, MediaPlayer.prepare(); методы внутри AsyncTask –

+0

@AmandaFernandez: пожалуйста, покажите служебный код с AsyncTask –

 Смежные вопросы

  • Нет связанных вопросов^_^