2012-01-11 65 views
1

我正在構建一個android應用程序,我基本上是從web內容提供者實現音樂播放器。 簡而言之,我有一個玩家,玩「玩」,「暫停」,「停止」玩。同時,我正在使用一個新的線程在搜索欄上提供進度信息,並使用textView的長度和播放時間。Android線程問題

我想問一下關於線程最好的建議。我想在按下暫停時暫停線程,按停止時停止線程,按下游戲時恢復/啓動它。

我有這樣的事情:

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

而且即便如此,將螺紋完全死了,當我離開我的應用程序?它不會繼續運行嗎?

非常感謝,如果在別處回答,非常抱歉。

+0

當你離開你的應用程序,如果你不使用停止條件,但它仍然有一段活着。 – lv0gun9 2012-01-11 23:17:05

+0

我想停止線程的唯一方法是在條件上設置布爾值。然後在onActivityDestroy上設置這個布爾值。另外,我只能假設暫停線程是不可能的。所以暫停音樂,不會暫停線程。但假設所有的處理都得到妥善處理,由於條件的原因,線程將不得不停止一段時間。 – 2012-01-11 23:50:41

+0

試試這個給你的onDestroy finish(); android.os.Process.killProcess(android.os.Process.myPid()); – lv0gun9 2012-01-12 00:11:32

回答

2

我在我的mediaPlayerDemo中使用Handler + Broadcast。 MediaPlayer在服務中運行,並使用handler.post(可運行)製作一個圓。 在了Runnable我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){}避免消耗在MediaPlayer暫停或停止。