排除 IntelliJ IDEA 版本信息
IntelliJ IDEA 2022.1.3 (Community Edition)
Build #IC-221.5921.22, built on June 21, 2022
Runtime version: 11.0.15+10-b2043.56 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Windows 10 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 1012M
Cores: 8
Non-Bundled Plugins:
com.intellij.zh (221.224)
Kotlin: 221-1.6.21-release-337-IJ5921.22
最新的版本,依旧会报错
IDEA 告警信息提示
Call to 'Thread.sleep()' in a loop, probably busy-waiting
Inspection info: Reports calls to java.lang.Thread.sleep() that occur inside loops. Such calls are indicative of "busy-waiting". Busy-waiting is often inefficient, and may result in unexpected deadlocks as busy-waiting threads do not release locked resources.
中文翻译
解决办法:
- 1.Thread.sleep() 替换为Timer
- 2.ScheduledExecutorService方案实现线程时长频率
为什么这样做
Thread.sleep()代码告警位置
告警位置特征:
- 1.循环中使用Thread.sleep(),传入参数(millis:300)很短
- 2.导致持续不断的sleep 不安全
- 尝试去掉循环效果
黄色代码报警标志已经消失。
使用Timer 替代Thread.sleep()
android-timer
基于Handler的Android定时器与倒计时器
源码地址:Github AndroidTimer
特性
支持操作 :
- start
- pause
- resume
- cancel
使用
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
...
compile 'com.github.xesam:AndroidTimer:v0.1'
}
TODO
- add ticker sequence
使用
CountTimer
new CountTimer(100) {
@Override
public void onTick(long millisFly) { // millisFly is the Elapsed time at *Running State*
vCountSwitcher.setText((millisFly) + "");
Log.d("onTick", millisFly + "");
}
};
CountDownTimer
new CountDownTimer(10_000, 100) {
@Override
public void onTick(long millisUntilFinished) { // millisUntilFinished is the left time at *Running State*
Log.d("onTick", millisFly + "");
}
@Override
public void onCancel(long millisUntilFinished) {
}
@Override
public void onPause(long millisUntilFinished) {
}
@Override
public void onResume(long millisUntilFinished) {
}
@Override
public void onFinish() {
}
};
截图
参考自 Android SDK 中的 CountDownTimer