我是编程新手,我已经为此困难了好几天,无法让它发挥作用。
我有一个执行某些任务的循环。它将在ImageView
中显示该特定任务的图片。所以它是这样的:
我尝试使用带有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”让主线程等待延迟。
答案 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){};