0

これが私のコードです

public void invalidateWidget(boolean invalidateUsingCaches) {
        mUpdatingWidget = true;

        if (invalidateUsingCaches) {
            widget.invalidateUsingCaches();
            if (widget.isRefreshRequired()) {
                widget.initializeRefreshRequired();
                mWidgetUpdateHandler.removeMessages(handlerMessage);
                mWidgetUpdateHandler.sendEmptyMessageDelayed(handlerMessage,
                        handlerDelay);
            }
        } else {
            widget.invalidate(false);
        }

        refreshImageView();

        mUpdatingWidget = false;
    }

この行

mWidgetUpdateHandler.sendEmptyMessageDelayed(handlerMessage,
                        handlerDelay); 

これにより、Android バージョン 2.3 の携帯電話での変更で imageview が更新されなくなりますが、新しい Android バージョンでは機能します。

これまでのところ、次のことを試しました。

  1. imageview.invalidate();
  2. ハンドラーでランナブルを使用しました。
  3. activity.runOnUiThread();

コードは新しい Android バージョンで動作することを忘れないでください。コードは Android のガイドラインに従っているため、すべてのバージョンで動作するはずです。

なぜこれが起こるべきなのか、誰にも手がかりがありますか? 解決?
MessageQueue はここで何か関係がありますか?

4

1 に答える 1

0

問題は、imageview に新しいビットマップを提供することにありました。ハンドラーの handleMessage() で、イメージビューに新しいビットマップを与えていたため、変更で更新されませんでした。ハンドラーは正常に機能しました。古いAndroidバージョンでimageviewが新しいビットマップを拒否した理由はまだわかりませんが。

同じビットマップを保持することで問題を解決しました。

于 2012-12-17T17:36:51.430 に答える