如何避免调用 handler.postDelayed(Runnable run) ?

我有这种方法来扫描蓝牙 LE 设备。扫描仪异步运行 10 秒,然后中断。


 public void startScanning() {

    Handler handler = new Handler();


    final long SCAN_PERIOD = 10000;

    handler.postDelayed(new Runnable() {

        @Override

        public void run() {

            btScanner.stopScan(leScanCallback);

        }

    }, SCAN_PERIOD);

    btScanner.startScan(leScanCallback);

}

但是,根据扫描期间验证的条件(例如,我找到了我正在寻找的设备等),我会调用btScanner.stopScan(leScanCallback). 所以我不想在之后调用 stopScan,SCAN_PERIOD否则我会调用它两次。如何避免第二次致电?


慕森王
浏览 141回答 3
3回答

吃鸡游戏

尝试删除回调:handler.removeCallbacksAndMessages(null);

人到中年有点甜

Handler handler = new Handler();Runnable runnableRunner = new Runnable() {    @Override    public void run() {        btScanner.stopScan(leScanCallback);    } }public void startScanning() {  final long SCAN_PERIOD = 10000;  handler.postDelayed(runnableRunner, SCAN_PERIOD);  btScanner.startScan(leScanCallback);}使用removeCallbacks删除消息队列中Runnable r的任何挂起的帖子。// cancel runnable whenever your condition is met.handler.removeCallbacks(runnableRunner);或用于删除所有消息和回调handler.removeCallbacksAndMessages(null);

暮色呼如

关于这个问题我还有另一个问题。我在代码的“顺序”部分中有一个方法,而不是在异步部分中,只有在调用该方法或在过期之后m()才需要调用该方法。我如何检查这些条件并基本上等待这两种情况之一发生?我需要放入同步吗?(现在我也有了可以使用的全局)handler.removeCallbacksAndMessages(null);SCAN_PERIODm()runhandler
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java