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

Java 如何避免调用handler.postDelayed(Runnable run)?,java,android-studio,asynchronous,bluetooth-lowenergy,postdelayed,Java,Android Studio,Asynchronous,Bluetooth Lowenergy,Postdelayed,我有这个方法来扫描蓝牙设备。扫描仪异步运行10秒,然后中断 public void startScanning() { Handler handler = new Handler(); final long SCAN_PERIOD = 10000; handler.postDelayed(new Runnable() { @Override public void run() { btScanner.stopSc

我有这个方法来扫描蓝牙设备。扫描仪异步运行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)
。所以我不想在
SCAN\u PERIOD
之后调用stopScan,否则我会调用它两次。如何避免第二次呼叫?

尝试取消回拨:

handler.removeCallbacksAndMessages(null);
使用将删除消息队列中的所有挂起的Runnable r POST

// cancel runnable whenever your condition is met.
handler.removeCallbacks(runnableRunner);
或用于删除所有消息和回调

handler.removeCallbacksAndMessages(null);

关于这个问题,我还有一个问题。 在代码的“顺序”部分,而不是异步部分,我有一个方法
m()
,只有当
处理程序.removeCallbacksAndMessages(null)中的任何一个出现时,我才需要调用该方法,或在
扫描周期
过期后调用。我如何检查这些条件,并基本上等待其中一个条件发生?我需要将
m()
放入同步
运行中吗?

(现在我还可以使用全局
处理程序

我是否应该将我的方法更改为
公共处理程序startScanning(){……return handler;}
?@raff5184否,只需将处理程序声明为全局变量并在方法中初始化它。在删除回调之前,只需检查(handler!=null)
handler.removeCallbacksAndMessages(null);