2012-01-11 5 views
1

Я создаю приложение для Android, в котором я в основном реализую музыкальный плеер у поставщика веб-контента. Вкратце, у меня есть плеер, с «играми», «паузой», «остановкой» игры. В то же время я использую новый поток для предоставления информации о ходе работы в строке поиска и textView с длиной и временем воспроизведения.Вопросы на темы для Android

Я хотел бы попросить ваш совет по лучшему aproach на резьбе. Я хочу приостановить поток при нажатии паузы, остановить его, когда нажата кнопка остановки, и возобновить/запустить его при нажатии на воспроизведение.

У меня есть что-то вроде этого:

Thread thread = new Thread(new Runnable() 
{ 
    public void run() 
    { 
     while(!finished && !stopped) 
     {//Do some action on Views...}} 

И даже так, будет ли поток быть полностью мертв, когда я оставляю мое приложение? Разве он не будет работать?

Спасибо вам большое, и извините, если на это ответят в другом месте.

+0

При выходе из приложения, если вы не используете стоп состояние, он все еще жив, на некоторое время. – lv0gun9

+0

Я предполагаю, что единственный способ остановить поток - установить логическое условие. И оставив приложение, установите также это логическое значение в onActivityDestroy. Кроме того, я могу только предположить, что приостановить поток невозможно. Так что пауза в музыке не остановит поток. Но при условии, что всякая забота будет обработана должным образом, поток должен будет когда-то остановиться, благодаря условию. –

+0

попробуйте это на ваш onDestroy finish(); android.os.Process.killProcess (android.os.Process.myPid()); – lv0gun9

ответ

2

Я использую Handler + Broadcast в своем mediaPlayerDemo. MediaPlayer работает в службе и использует handler.post (runnable), чтобы сделать круг. В Runnable I sendBroadcast() и изменить TextView когда OnReceive в моей деятельности

public void sendToUpdate() { 
    // handler 
    if (progressHandler == null) { 
     progressHandler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
       super.handleMessage(msg); 
      } 
     }; 
    } 
    progressHandler.removeCallbacks(progress); 
    progressHandler.post(progress); 
} 

Runnable progress = new Runnable() { 
    @Override 
    public void run() { 
     if (mp != null) { 
      musicCurrentTime = mp.getCurrentPosition(); 
      musicLength = mp.getDuration(); 
      Intent intent = new Intent(); 
      intent 
        .setAction("com.cookie.media.MUSIC_UPDATE"); 
      intent.putExtra("musicCurrentTime", musicCurrentTime); 
      intent.putExtra("musicId", musicId); 
      intent.putExtra("musicLength", musicLength); 
      sendBroadcast(intent); 
     } 
     progressHandler.removeCallbacks(progress); 
     progressHandler.postDelayed(progress, 1000); 
    } 
}; 

Как это Вы можете добавить если (mp.isPlaying) {}, чтобы избежать потреблять, когда пауза медиаплеер или остановить.

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