从OnCompletionListener中的处理程序中断postdelayed

时间:2013-11-23 17:07:24

标签: android handler android-mediaplayer postdelayed

我有几个不同的Activity,每个Activity都有一个MediaPlayer和一个OnCompletionListener,可以在当前文件停止播放后启动其他活动。在OnCompletion Listener中还有一个延迟,我通过带有postDelayed的Handler来实现它,它看起来像这样:

public void onCompletion(MediaPlayer mp) {

        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                try {
                    Intent stopplay;
                    stopplay = new Intent(actualActivity, Class
                            .forName(nextView));
                    actualActivity.startActivity(stopplay);
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }, stopTime);


}

这个问题是,当我调用我的SettingsActivity时,有时它只是切换到接下来会发生的Activity。所以我认为它挂在postDelayd的等待......

我怎么能绕过这个?

我也在这些活动的onStop,onPause和onDestroy中执行此操作:

if (mPlayer != null) {
        mPlayer.stop();
        mPlayer.release();
        mPlayer = null;
    }

1 个答案:

答案 0 :(得分:3)

当您不希望执行回调时,您必须取消处理程序的回调。

在您的活动范围内定义您的处理程序(因为您必须到达它)。像这样:

public class MainActivity extends Activity {

    Handler handler = new Handler();
    Runnable myRunnable;
        ...
}

并在您的活动中定义您的runnable(可能在您onCreate方法内)

myRunnable = new Runnable() {
    @Override
    public void run() {
        try {
            Intent stopplay;
            stopplay = new Intent(actualActivity, Class
                    .forName(nextView));
            actualActivity.startActivity(stopplay);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
};

更改您的代码:

handler.removeCallbacks(myRunnable);
handler.postDelayed(myRunnable, stopTime);

如果你想取消它,试试这个:

handler.removeCallbacks(myRunnable);
相关问题