为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森王 2023-10-13 10:35:30
我有这种方法来扫描蓝牙 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否则我会调用它两次。如何避免第二次致电?
查看完整描述

3 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

尝试删除回调:

handler.removeCallbacksAndMessages(null);


查看完整回答
反对 回复 2023-10-13
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

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);


查看完整回答
反对 回复 2023-10-13
?
暮色呼如

TA贡献1853条经验 获得超9个赞

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



查看完整回答
反对 回复 2023-10-13
  • 3 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信