0

我是编程新手,我已经为此苦苦挣扎了好几天,无法让它发挥作用。

我有一个循环来执行一些任务。它将ImageView为该特定任务显示一张图片。所以它是这样的:

  • 设置图像资源
  • 做一些任务
  • 等待 1 秒
  • 然后重新开始一切,直到命令结束
  • 当所有命令结束时,通过调用 finish() 关闭该活动

我尝试使用带有 runnable 和 asynctask 的处理程序,但我无法让它工作。UI 总是在 1 秒延迟之后更新。当我在命令结束后调用 finish() 时,照片似乎根本没有出现。

for(int i=0; i<actions.size(); i++) {
            switch((int)actions.get(i)[0]) {
            case 0:
                ivActionIcon.setImageResource(R.drawable.image);
                sleeping=true;
                DelayAsyncTask delay=new DelayAsyncTask();
                delay.execute();
                while(sleeping){};
                break;
            }
        }
        finish();
class DelayAsyncTask extends AsyncTask<String, Void, Bitmap> {
    @Override
    protected Bitmap doInBackground(String... params) {
        try {
            Thread.sleep(5000);
        } catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }
    @Override 
    protected void onPostExecute(Bitmap bitmap) {
        sleeping=false;
    }

}

我正在使用一个变量“睡眠”来让主线程等待延迟。

4

1 回答 1

0

只是猜测这个循环是在 UI 线程中的某个地方。这意味着您将阻塞 UI 线程,直到异步完成。这是一个不,不!为什么不只更新 onPostExecute 中的图像?就像是

class DelayAsyncTask extends AsyncTask<String, Void, Bitmap> {
    @Override
    protected Bitmap doInBackground(String... params) {
        try {
            Thread.sleep(5000);
        } catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }
    @Override 
    protected void onPostExecute(Bitmap bitmap) {
        ivActionIcon.setImageResource(R.drawable.new_image);
    }

显然也删除了这行代码(我想我从来不知道这样做的原因)。

while(sleeping){};
于 2012-04-30T13:51:04.830 回答