【问题标题】:Android handlers don't work on specified interval of timeAndroid 处理程序在指定的时间间隔内不起作用
【发布时间】:2020-10-19 12:36:28
【问题描述】:

我正在构建一个 Android 应用程序,我需要在特定的时间间隔进行短暂的振动,以防满足某些条件。

问题是,当满足这些条件时,即使我将设备设置为振动 2 秒,它有时会振动超过 10 秒,有时振动不会停止,直到设备重新启动。 另外,我注意到处理程序中的可运行对象没有以正确的时间间隔运行。它应该是每 interval 秒,但通常需要更多时间。

这是一个例子:

fullBatteryHandler.postDelayed(new Runnable() {
            @Override
                public void run() {
                if(isBatteryFull){
                    Log.d("vibrate", "full battery");
                    v.vibrate(VibrationEffect.createOneShot(2000, VibrationEffect.DEFAULT_AMPLITUDE));
                }
                fullBatteryHandler.postDelayed(this, interval * 1000);
            }
         }, 1000);

你知道为什么会这样吗?

编辑:我通过添加 WakeLock 解决了这个问题。

【问题讨论】:

  • 也许处理程序被多次调用?您是否在 logcat 中多次看到 full battery
  • 好吧,当它检查电池是否充满时,我每隔 interval 秒就会看到一次。但我认为它应该是这样工作的。起初我遇到了这个问题,处理程序被调用了几次,我认为这就是问题所在。但是现在只调用了一次,问题依然存在。

标签: android android-handler android-vibration


【解决方案1】:

试试这个:

int interval = 1;
fullBatteryHandler.postDelayed(new Runnable() {
            @Override
                public void run() {
                if(isBatteryFull){
                    Log.d("vibrate", "full battery");
                    v.vibrate(VibrationEffect.createOneShot(2000, VibrationEffect.DEFAULT_AMPLITUDE));
                    fullBatteryHandler.postDelayed(this, (interval + 2) * 1000);
                } else {
                    fullBatteryHandler.postDelayed(this, interval * 1000);
                }
            }
         }, 1000);

【讨论】:

  • 不起作用。它只振动一次,然后不再进入 run()。
  • 它应该振动多少次?
  • 当电池电量为 100 且设备正在充电时,它应该每 间隔 秒振动 2 秒。我确定我已经完成了正确的条件,并且只有在电池充满并且设备正在充电时才会进入 if()。
  • 我已经更新了。如果电池已满,您需要振动 2 秒并等待它结束并开始新的 postDelay。
  • 2020-10-19 17:21:03.695 32422-32422/com.example.com D/vibrate: full battery 2020-10-19 17:23:05.564 32422-32422/com.example.com D/vibrate: full battery 2020-10-19 17:25:52.822 32422-32422/com.example.com D/vibrate: full battery 有一段时间运行良好,但在某些时候又开始以错误的时间间隔运行
猜你喜欢
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
相关资源
最近更新 更多