所以基本上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()进行了尝试。不确定它是否会有所帮助,但认为值得一试。它就像这样发生。我点击播放音乐......音乐播放得很好...我按下后退按钮(大多数时候它第一次做它应该做的事情)然后我再回来播放音乐(哪个工作正常)然后我再次按下它会延迟片刻,然后强行关闭。即使没有强制关闭,也会发生延迟。我最终希望有很多按钮可以播放差异歌曲,在这种情况下我会有下一个版本的最后一个。如果发布不起作用或者还有其他问题,我希望在继续前进之前找到它。谢谢,任何和所有的帮助表示赞赏。我也很感谢你花时间阅读这篇长篇大论。小心。
答案 0 :(得分:1)
有些MediaPlayer方法是同步的,比如start()。所以发生的事情是,主要的ui线程在播放时陷入困境,无法处理下一个事件,例如后退按钮。在另一个线程中运行媒体播放器。另外,onBackPressed()的实现应该移到onStop减去finish()。