延迟更新照片

时间:2012-04-29 14:32:16

标签: android

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

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

  • setImageResource
  • 做一些任务
  • 等待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;
    }

}

我使用变量“sleep”让主线程等待延迟。

1 个答案:

答案 0 :(得分: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){};