延迟runnables并在terminate()调用后立即终止

时间:2016-01-07 12:18:28

标签: java android multithreading android-handler

如何延迟runnables(更改背景颜色)但是能够在从Activity调用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循环再次检查之前完成,但我不知道如何解决这个问题。

0 个答案:

没有答案