如题,我在做一个播放器。当activity点播放按钮的时候就启动service来播放音乐,
同时service根据音乐是否正在播放,用handler来更新activity的歌词。但是我点了播放之后,再点home键,也就是想后台播放,此时avd模拟器就卡住死机了。我在想是不是如果activity不可见,service就不能更新activity的UI了?我是用timer另外起一线程来进行UI更新的。如果要后台播放,就不能更新歌词了?
核心代码如下:
timer.schedule(new TimerTask()
{
@Override
public void run()
{

while(player.isPlaying()){
Message msg=new Message();
Bundle b=new Bundle();
int position=player.getCurrentPosition();
b.putLong("position", position);
if(lyric.sentences.get(currentIndex).isIntime(position)){
b.putString("line",lyric.sentences.get(currentIndex).content );
}else{
b.putString("line", null);
currentIndex++;
}
msg.setData(b);
MusicPlayerActivity.seekBarHandler.sendMessage(msg);
}
}
}, 5, 500);

解决方案 »

  1.   

    MusicPlayerActivity.seekBarHandler.sendMessage(msg);seekBarHandler是静态的?不要用静态咯,把handler当成一个MusicPlayerActivity的一个成员变量就可以了。
      

  2.   

    sendMessage 只会发消息给handler注册的线程。 如果这时MusicPlayerActivity不可见,即以转入后台,那么你发送的消息应该会留在 MusicPlayerActivity的消息队列中并阻塞住(没有验证过),当下次MusicPlayerActivity重新可见时再处理阻塞的消息。