在MediaPlayer流音乐后按下后强制关闭

时间:2011-09-03 06:05:14

标签: android media-player

所以基本上MediaPlayer正在播放我想要的音乐。我遇到的问题是试图让它释放onBackPress(),以便1)它停止播放2)它从内存中释放它。这是我目前正在使用的代码。

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();
}

}

以下是我从log cat获得的输出。

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:ERROR / ActivityManager(1086):CPU使用率从9503ms到2795ms前: 09-02 22:35:05.167:ERROR / ActivityManager(1086):mediaserver:17%= 15%用户+ 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%user + 0%kernel 09-02 22:35:05.167:ERROR / ActivityManager(1086):battd:0%= 0%user + 0%kernel / faults:3 minor 09-02 22:35:05.167:ERROR / ActivityManager(1086):dsi:0%= 0%user + 0%kernel 09-02 22:35:05.167:ERROR / ActivityManager(1086):omap2_mcspi:0%= 0%user + 0%kernel 09-02 22:35:05.167:ERROR / ActivityManager(1086):putmethod.latin:0%= 0%user + 0%kernel / faults:79 minor 1 major 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%用户+ 5%内核+ 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中调用暂停

我已经在onBackPressed中使用和不使用pause()进行了尝试。不确定它是否会有所帮助,但认为值得一试。它就像这样发生。我点击播放音乐......音乐播放得很好...我按下后退按钮(大多数时候它第一次做它应该做的事情)然后我再回来播放音乐(哪个工作正常)然后我再次按下它会延迟片刻,然后强行关闭。即使没有强制关闭,也会发生延迟。我最终希望有很多按钮可以播放差异歌曲,在这种情况下我会有下一个版本的最后一个。如果发布不起作用或者还有其他问题,我希望在继续前进之前找到它。谢谢,任何和所有的帮助表示赞赏。我也很感谢你花时间阅读这篇长篇大论。小心。

1 个答案:

答案 0 :(得分:1)

有些MediaPlayer方法是同步的,比如start()。所以发生的事情是,主要的ui线程在播放时陷入困境,无法处理下一个事件,例如后退按钮。在另一个线程中运行媒体播放器。另外,onBackPressed()的实现应该移到onStop减去finish()。