在mainactivity中,我创建了一个处理程序作为实例变量:

SeekBar seek_bar;
MediaPlayer player;
Handler seekHandler = new Handler();


然后,我在MainActivity中使用以下两种方法在音频在媒体播放器中播放时更新搜索栏:

public void getInit() {
    seek_bar = (SeekBar) findViewById(R.id.seek_bar);
}

Runnable run = new Runnable() {

    @Override
    public void run() {
        seekUpdation();  **//Exception comes here while closing the app**
    }
};

public void seekUpdation() {

    seek_bar.setProgress(mMediaPlayer.getCurrentPosition());
    seekHandler.postDelayed(run, 1000);
}


我面临的问题是,当音频正在运行并且用户使用设备后退按钮关闭应用程序时。我得到NullPointerException。活动的销毁方法是:

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
        mMediaPlayer.stop();
        mMediaPlayer.release();
        mMediaPlayer = null;
    }
}

最佳答案

从onDestroy中的处理程序中删除所有排队的消息/回调。我敢打赌,它会在调用onDestroy之后运行最后一条消息。

10-07 12:57