Android 安卓处理器不';t在规定的时间间隔内工作

Android 安卓处理器不';t在规定的时间间隔内工作,android,android-handler,android-vibration,Android,Android Handler,Android Vibration,我正在构建一个Android应用程序,我需要在特定的时间间隔内进行短暂的振动,以防满足某些条件 问题是,当这些条件满足时,即使我将设备设置为振动2秒,它有时振动超过10秒,有时振动直到设备重新启动才会停止。 另外,我注意到处理程序中的runnable并没有以正确的时间间隔运行。应该是每隔几秒钟,但通常需要更多的时间 下面是一个例子: fullBatteryHandler.postDelayed(new Runnable() { @Override

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

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

下面是一个例子:

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);
你知道为什么会这样吗

编辑:我通过添加唤醒锁解决了此问题。

尝试以下操作:

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


可能处理程序被调用了不止一次?您是否在logcat中多次看到
电池电量已满
?嗯,当它检查电池电量是否已满时,我每隔几秒钟就会看到一次。但我认为这就是它应该如何工作的。起初我遇到了这个问题,处理程序被调用了好几次,我认为这就是问题所在。但是现在它只被调用一次,问题仍然存在。不起作用。它只会振动一次,然后不再运行()。它应该振动多少次?当电池电量为100且设备正在充电时,它应该每隔几秒振动2秒。我确信我做的条件是正确的,它输入if(),仅当电池已满且设备处于充电器状态时。我已更新。如果电池电量已满,您需要振动2秒,等待它结束并开始新的延时。
2020-10-19 17:21:03.695 32422-32422/com.example.com D/振动:电池电量已满2020-10-19 17:23:05.564 32422-32422/com.example.com D/振动:电池电量已满2020-10-19 17:25:52.822 32422-32422/com.example.com D/振动:电池电量已满
好吧,有一段时间,但在某个时候,它又开始在错误的时间间隔这样做