【问题标题】:Calling setImageResource from AsyncTask multiple times多次从 AsyncTask 调用 setImageResource
【发布时间】:2015-04-04 23:47:59
【问题描述】:

大家好。

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

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

如果我只这样做;

        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。

我错过了什么?

提前致谢。

【问题讨论】:

  • 这段代码与 AsyncTask 有什么关系?
  • @greenapps 我怀疑 AsyncTack 的 onProgressUpdate() 方法会延迟更新 UI。这将是我面临的错误的唯一逻辑解释。
  • 您仍然没有说明您的代码与 AsyncTask 或 onProgressUpdate() 有什么关系。我们在这里看不到这一点。请发布一个更好的例子。
  • mageView instantly turns to image3,。不,这至少需要六秒钟。
  • @greenapps 问题不在于它需要多少时间,或者我使用 AsyncTasks 的意图是什么。问题是,为什么这段代码会跳过 image2。我们可以继续讨论吗?

标签: android android-asynctask imageview


【解决方案1】:

我认为你需要一个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 结果。

【讨论】:

  • 这段代码有一些语法错误。您应该编写 Runnable(){ 并在 3000 之前删除括号,我修复了它们并且它起作用了。非常感谢。
  • @EmreAcar 我手头没有 IDE,所以如果您正确编辑我的答案,我将不胜感激
  • 这个答案是正确的。仅当程序返回事件队列时才进行重绘,这在线程休眠时是不可能的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-15
相关资源
最近更新 更多