多次从 AsyncTask 调用 setImageResource

Calling setImageResource from AsyncTask multiple times

大家好。

我正在使用 AsyncTasks 并从 doInBackground() 方法调用 publishProgress();。我很确定这里没有错误。

我需要更改 ImageView 的源,例如每 3 秒从 onProgressUpdate() 方法。

如果我只这样做;

        agiz.setImageResource(R.drawable.image1);

初始图像成功更改为image1。

但如果我尝试这样做(这实际上是我的目标)

        imageView.setImageResource(R.drawable.image1);

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
        }

        imageView.setImageResource(R.drawable.image2);

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
        }

        imageView.setImageResource(R.drawable.image3);

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
        }

imageView 等待 6 秒,然后 转到 image3,不显示 image2。

我错过了什么?

提前致谢。

我认为您需要一个 postDelayed 方法。它将更具可读性和有效性,因为此方法适用于 UI 线程。

imageView.postDelayed(new Runnable(){
    @Override
    public void run() {
        imageView.setImageResource(R.drawable.image1);
    }}
,3000);

imageView.postDelayed(new Runnable(){
    @Override
    public void run() {
        imageView.setImageResource(R.drawable.image2);
    }}
,6000);

imageView.postDelayed(new Runnable(){
    @Override
    public void run() {
        imageView.setImageResource(R.drawable.image3);
    }}
,9000);

解释你的问题。

我想你阻塞了 UI 线程。 Thread.sleep() 方法在您的 imageView 被重新绘制时立即阻止当前线程而无需等待,因此您得到 lock 结果。