Android MediaPlayer:如何在完成活动之前停止线程

问题描述 投票:3回答:1

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

并且我在主活动中有一个选项菜单,点击该选项将退出活动

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

    }

但它会抛出

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

我知道线程中存在问题,应该在退出活动之前停止该线程,但我不知道究竟有什么人可以帮助PLZ?

android multithreading android-mediaplayer
1个回答
5
投票

使用以下

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.
© www.soinside.com 2019 - 2024. All rights reserved.