2011-09-03 49 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