Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 延迟可运行项并在terminate()调用后立即终止_Java_Android_Multithreading_Android Handler - Fatal编程技术网

Java 延迟可运行项并在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

如何延迟可运行程序(更改背景颜色),但在从活动调用terminate()后立即终止处理程序

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吗。如果希望此方法在特定事件上运行,则可以等待该事件发生