2011-09-03 48 views
0

因此,基本上MediaPlayer正在播放我想要的音樂。我遇到的問題是試圖讓它釋放onBackPress(),以便1)它停止播放,2)它從內存中釋放它。這是我目前使用的代碼。MediaPlayer流媒體音樂後按下時強制關閉

public class Audio extends Activity { 

MediaPlayer mp,lastPlayed; 
String song = "http://www.pocketjourney.com/downloads/pj/tutorials/audio.mp3"; 
int playClick=0; 


@Override 
public void onCreate(Bundle icicle) { 

    super.onCreate(icicle); 
    setContentView(R.layout.audio); 

    mp = new MediaPlayer(); 
    lastPlayed = new MediaPlayer(); 

    final Button song1 = (Button)findViewById(R.id.song); 
    song1.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      if(playClick%2==0){ 
       song1.setBackgroundResource(R.drawable.button_pause); 
       try { 
        mp.setDataSource(song); 
       } catch (IllegalArgumentException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IllegalStateException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       try { 
        mp.prepare(); 
       } catch (IllegalStateException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       mp.start(); 
       playClick++; 
       lastPlayed = mp; 
      } 
      else if (playClick%2==1){ 
       song1.setBackgroundResource(R.drawable.button_play); 
       mp.pause(); 

       playClick=0; 
      } 

     } 
    }); 

} 

public void onBackPressed(){ 
    mp.pause(); 
    mp.release(); 

    finish(); 
} 

}

下面是輸出我從日誌貓得到。

09-02 22:35:05.167: ERROR/ActivityManager(1086): ANR in com.fallacystudios.talent (com.fallacystudios.talent/.Audio) 

09-02 22:35:05.167:ERROR/ActivityManager(1086):原因:keyDispatchingTimedOut 09-02 22:35:05.167:ERROR/ActivityManager(1086):負載:1.57/0.74/0.35 09-02 22:35:05.167:錯誤/ ActivityManager(1086):CPU使用率從9503ms到2795ms前: 09-02 22:35:05.167:ERROR/ActivityManager(1086):mediaserver:17%= 15%user + 1%內核/故障:17次 09-02 22:35:05.167:ERROR/ActivityManager(1086):ystudios.talent:17%= 16%用戶+ 0%內核/故障:7次 09-02 22 :35:05.167:ERROR/ActivityManager(1086):system_server:7%= 4%用戶+ 2%內核/故障:5次 09-02 22:35:05.167:ERROR/ActivityManager(1086):qtouch_obp_ts_w:0%= 0%用戶+ 0%內核 09-02 22:35:05.167:錯誤/ ActivityManager(1086):battd:0%= 0%user + 0%kernel/faults:3次要 09-02 22:35:05.167:錯誤/ ActivityManager(1086):dsi:0%= 0%用戶+ 0%內核 09-02 22:35:05.167:ERROR/ActivityManager(1086):omap2_mcspi:0 %= 0%用戶+ 0%內核 09-02 22:35:05.167:錯誤/ ActivityManager(1086):putmethod.latin:0%= 0%用戶+ 0%內核/故障:79次要1主要 09- 02 22:35:05.167:ERROR/ActivityManager(1086):m.android.phone:0%= 0%user + 0%kernel 09-02 22:35:05.167:ERROR/ActivityManager(1086):TOTAL:35 %= 29%user + 5%kernel + 0%irq + 0%softirq 09-02 22:37:19.863:ERROR/Tethering(1086):嘗試移除未知iface(usb0),忽略 09-02 22:48:24.214:ERROR/Tethering(1086):試圖刪除未知的iface(usb0),忽略 09-02 22:49:44.269:ERROR/MediaPlayer(10964):暫停在狀態1中調用

I在onBackPressed中嘗試了它,而沒有停頓()。不知道是否會有幫助,但認爲這是值得一試。它是這樣發生的。我點擊播放音樂......音樂播放就好了......我按下後退按鈕(大多數時候它是第一次播放它應該的),然後我再次播放音樂(工作正常),然後我再按一次,它會延遲片刻,然後強制關閉。即使沒有強制關閉,延遲也會發生。我最終希望有很多按鈕來播放差異歌曲,在這種情況下,我會在下一個發行版中播放最後一個。如果發佈不起作用,或者在繼續前進之前我想找到另一個問題。感謝和任何和所有幫助表示讚賞。我也很感激你花時間閱讀這個漫長的事情。保重。

回答

1

一些MediaPlayer方法是同步的,如start()。所以發生的情況是,主UI線程在播放時卡住,無法處理下一個事件,如後退按鈕。在另一個線程中運行媒體播放器。同樣,onBackPressed()的實現應該被移到onStop減去finish()。

+0

你有什麼或知道如何製作我需要的線程的任何好例子?謝謝,我會修復onStop部分。 – steven

+0

[進程和線程](http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html) –

+0

謝謝,我很感激。我試圖讓線程工作,當他們不爲我工作時,我只是嘗試了onStop修復,這實際上導致它單獨工作。我會看看你發佈的這個主題,因爲我確信它會很快再次出現,所以感謝你的幫助。 – steven