2012-01-11 70 views
1

我正在构建一个android应用程序,我基本上是从web内容提供者实现音乐播放器。 简而言之,我有一个玩家,玩“玩”,“暂停”,“停止”玩。同时,我正在使用一个新的线程在搜索栏上提供进度信息,并使用textView的长度和播放时间。Android线程问题

我想问一下关于线程最好的建议。我想在按下暂停时暂停线程,按停止时停止线程,按下游戏时恢复/启动它。

我有这样的事情:

Thread thread = new Thread(new Runnable() 
{ 
    public void run() 
    { 
     while(!finished && !stopped) 
     {//Do some action on Views...}} 

而且即便如此,将螺纹完全死了,当我离开我的应用程序?它不会继续运行吗?

非常感谢,如果在别处回答,非常抱歉。

+0

当你离开你的应用程序,如果你不使用停止条件,但它仍然有一段活着。 – lv0gun9 2012-01-11 23:17:05

+0

我想停止线程的唯一方法是在条件上设置布尔值。然后在onActivityDestroy上设置这个布尔值。另外,我只能假设暂停线程是不可能的。所以暂停音乐,不会暂停线程。但假设所有的处理都得到妥善处理,由于条件的原因,线程将不得不停止一段时间。 – 2012-01-11 23:50:41

+0

试试这个给你的onDestroy finish(); android.os.Process.killProcess(android.os.Process.myPid()); – lv0gun9 2012-01-12 00:11:32

回答

2

我在我的mediaPlayerDemo中使用Handler + Broadcast。 MediaPlayer在服务中运行,并使用handler.post(可运行)制作一个圆。 在了Runnable我sendBroadcast(),改变TextView的时候的onReceive在我的活动

public void sendToUpdate() { 
    // handler 
    if (progressHandler == null) { 
     progressHandler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
       super.handleMessage(msg); 
      } 
     }; 
    } 
    progressHandler.removeCallbacks(progress); 
    progressHandler.post(progress); 
} 

Runnable progress = new Runnable() { 
    @Override 
    public void run() { 
     if (mp != null) { 
      musicCurrentTime = mp.getCurrentPosition(); 
      musicLength = mp.getDuration(); 
      Intent intent = new Intent(); 
      intent 
        .setAction("com.cookie.media.MUSIC_UPDATE"); 
      intent.putExtra("musicCurrentTime", musicCurrentTime); 
      intent.putExtra("musicId", musicId); 
      intent.putExtra("musicLength", musicLength); 
      sendBroadcast(intent); 
     } 
     progressHandler.removeCallbacks(progress); 
     progressHandler.postDelayed(progress, 1000); 
    } 
}; 

像这样 您可以添加如果(mp.isPlaying){}避免消耗在MediaPlayer暂停或停止。