我试图以不同的速度眨眼相机。
所以要做到这一点我使用搜索栏来改变闪烁的速度。
当我第一次更改搜索栏的值时,它开始闪烁
private fun startFlashLightBlink(context: Context,blinkSpeed: Int) {
isBlinkFlashLight=true
flashLightBlinkThread = Thread{
Looper.prepare()
while (isBlinkFlashLight){
val blinkInterval:Long=blinkSpeed*100L
//getMainLooper() handler is associated "with the Looper for the current thread" ... which is currently the main(UI) thread
val handler = Handler()
var runnable:Runnable = Runnable{
toggleFlashLight()
}
handler.postDelayed(runnable,blinkInterval)
}
Looper.loop()
}
flashLightBlinkThread?.start()
}
但它会冻结主用户界面,所以现在我无法使用搜索栏更改值并获取ANR消息。 我该怎么办?我不能使用asynkTask。 服务也不是一个好选择。我认为。
答案 0 :(得分:0)
尽量不要使用单独的Thread和Looper。处理程序足以满足您的需求。像这样循环:
private static final long POST_DELAY = 100;
private final Handler handler = new Handler();
private final Runnable cycleRunnable = new Runnable() {
public void run() {
if (isCycling) {
// make your cycle body here
handler.postDelayed(cycleRunnable, POST_DELAY);
}
}
};
private boolean isCycling = false;
public void startCycle() {
if (!isCycling) {
isCycling = true;
handler.postDelayed(cycleRunnable, POST_DELAY);
}
}
public void stopCycle() {
if (isCycling) {
isCycling = false;
handler.removeCallbacks(cycleRunnable);
}
}