Android线程问题

时间:2012-01-11 22:52:38

标签: android multithreading thread-safety

我正在构建一个Android应用程序,我基本上从Web内容提供商实现音乐播放器。 简而言之,我有一个玩家,“玩”,“停顿”,“停止”玩。同时我使用一个新线程来提供搜索栏的进度信息,以及带有长度和时间的textView。

我想问一下你对线程最好的方法的建议。我想在按下暂停时暂停线程,在按下停止时停止线程,并在按下播放时恢复/启动线程。

我有这样的事情:

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

即便如此,当我离开我的应用程序时,线程会完全死掉吗?它不会继续运行吗?

非常感谢,如果在其他地方得到解答,对不起。

2 个答案:

答案 0 :(得分:2)

我在mediaPlayerDemo中使用Handler + Broadcast。 MediaPlayer在服务中运行,并使用 handler.post(runnable)制作一个圆圈。 在Runnable中我 sendBroadcast()并在我的活动中 onReceive 时更改textView

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

喜欢这个 您可以添加 if(mp.isPlaying){} ,以避免在媒体播放器暂停或停止时消耗。

答案 1 :(得分:0)

> I would like to ask your advice on the best aproach on threading.

可以查看media player tutorial帮助

上的官方http://developer.android.com/guide/topics/media/mediaplayer.html