java如何避免处理程序。被调用后延迟(可运行运行)?
我有这个方法来扫描蓝牙设备。扫描仪异步运行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_PERIOD
之后调用stopScan,否则我会调用它两次。如何避免第二次呼叫
# 1 楼答案
尝试删除回拨:
# 2 楼答案
关于这个问题,我还有一个问题。 我在代码的“顺序”部分中有一个方法
m()
,而不是在异步部分,只有在调用了handler.removeCallbacksAndMessages(null);
或者SCAN_PERIOD
过期之后,我才需要调用该方法。我如何检查这些条件,并基本上等待其中一个条件发生?我是否需要将m()
放入同步run
中? (现在我还可以使用全局handler
)# 3 楼答案
UseremoveCallbacks删除消息队列中任何挂起的Runnable r帖子
或用于删除所有消息和回调