安卓媒体播放器 : how to stop a thread before finishing activity

标签 android multithreading android-mediaplayer

我在 android 中创建了一个 mediplayer,它有一个可运行的后台线程,用于保持时间搜索器的更新

private Runnable mUpdateTimeTask = new Runnable() {
    public void run() {
        long totalDuration = mediaPlayer.getDuration();
        long currentDuration = mediaPlayer.getCurrentPosition();

        // .... setting textviews of durations
           // ... converting milli to mm:ss and setProgress(progress)

        mHandler.postDelayed(this, 100);
    }
};

而且我在主 Activity 中有一个选项菜单,点击后应该退出 Activity

public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.exitplayer)
            exitPlayer();
        return super.onOptionsItemSelected(item);
    }
    private void exitPlayer() {
        mediaPlayer.stop();
        mediaPlayer.release();
        try {
            mUpdateTimeTask.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    this.finish();

    }

但是它抛出

java.lang.IllegalStateException at android.media.MediaPlayer.getDuration(Native Method)

我知道线程存在问题,应该在退出 Activity 之前停止该线程,但我不知 Prop 体如何 有人可以帮忙吗?

最佳答案

使用下面的

mhandler.removeCallbacks(mUpdateTimeTask);

http://developer.android.com/reference/android/os/Handler.html

public final void removeCallbacks (Runnable r)

Added in API level 1
Remove any pending posts of Runnable r that are in the message queue.

关于安卓媒体播放器 : how to stop a thread before finishing activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19865044/

相关文章:

Java用持久化存储实现锁定机制

android - 不确定的 ProgressBar 使我的后台线程非常慢

android - 怎么把Youtube URL转换成RTSP URL?

android - 如何在 Material Design 工具栏上添加搜索按钮

java - 从 AsyncTask 返回位图文件会卡住 UI 线程

java - 打开带有建议日期的 DatePicker

android - 构造函数 ArrayAdapter<String>(int, ArrayList<String>) 未定义

java - 保护映射免受 java 中线程的影响

android - 在 Http Live Streaming Android 3.0+ 中获取当前日期

android - 自动播放列表中的歌曲?