Java 延迟可运行项并在terminate()调用后立即终止
如何延迟可运行程序(更改背景颜色),但在从活动调用terminate()后立即终止处理程序Java 延迟可运行项并在terminate()调用后立即终止,java,android,multithreading,android-handler,Java,Android,Multithreading,Android Handler,如何延迟可运行程序(更改背景颜色),但在从活动调用terminate()后立即终止处理程序 public void handleBackgroundChange() { while(i != -1) { if(method.equals(context.getResources().getString(R.string.RGB_and_White))) { mHandler.post(r1); } else if (method.e
public void handleBackgroundChange() {
while(i != -1) {
if(method.equals(context.getResources().getString(R.string.RGB_and_White))) {
mHandler.post(r1);
} else if (method.equals(context.getResources().getString(R.string.Black_and_White))) {
mHandler.post(r2);
} else if (method.equals(context.getResources().getString(R.string.White))) {
mView.setBackgroundResource(colors.get(3));
}
SystemClock.sleep(duration.longValue());
}
}
@Override
public void run() {
handleBackgroundChange();
}
public void terminate() {
i = -1;
}
Runnable r1 = new Runnable() {
@Override
public void run() {
if (i != -1) {
mView.setBackgroundResource(colors.get(i));
i++;
if (i == 4) {
i = 0;
}
}
}
};
Runnable r2 = new Runnable() {
@Override
public void run() {
if (i != -1) {
mView.setBackgroundResource(bw.get(i));
i++;
if (i == 2) {
i = 0;
}
}
}
};
背景信息:我目前正在修复几个月前制作的一个应用程序(屏幕老化修复程序)。下面的代码正在运行,但处理程序需要很长时间才能终止,特别是当持续时间很长时。我知道是什么原因(SystemClock.sleep(…)必须在while循环再次检查I之前完成,但我不知道如何解决此问题。您应该将问题归结为实际问题“我如何延迟…”经验法则:永远不要在UI线程上睡觉。用户不喜欢itI我知道我不应该在UI线程上使用sleep,但我想知道我应该使用什么来代替它。你不能使用wait and notify吗。如果希望此方法在特定事件上运行,则可以等待该事件发生