1

ここで何が起こっているかを説明します。runOnUiThread() メソッドを使用して、そのクラスが別の電話からメッセージを受信したときに別のクラスから Image View を変更しています。mainclass.runOnUiThread(new Runnable...) などを使って呼び出しています。アプリケーションを初めて実行したときは機能しますが、戻るボタンを押してアプリケーションを終了し、アプリケーションを再度起動すると、イメージ ビューが更新されなくなります。私が取ったログは、すべて問題なく実行されていることを示していますが、Image View は変わりません。エラーは発生せず、アプリケーションを実行してもクラッシュしません。画像ビューが更新されないだけです。何がこれを引き起こしているのでしょうか?

編集*:これは、アクティビティを拡張しないクラスでimageViewを変更するために実際に使用しているものです

peerActivity.runOnUiThread(

                                new Runnable(){

                                    @Override
                                    public void run() {
                                        Log.v("Thread@", "Thread is running");
                                        Log.v("Thread@2", decodedImage.toString());
                                        // TODO Auto-generated method stub
                                        peerActivity.ivPhoto.setImageBitmap(decodedImage);
                                        Log.v("Thread@3", "Past UI Change");

                                    }

                                });

ここで、peerActivity は他のクラス参照を保持し、ivPHoto はイメージ ビューです。私がする必要があると思うのは、プログラムが閉じたときにそのスレッドを強制終了する方法を見つけることです (プログラム マネージャーに入ると、[強制終了] ボタンがまだ使用可能です)。これを行う方法はありますか?

Edit2 *: UI スレッドで作業するためにさまざまなアプローチを試してみましたが、すべて同じ結果が得られました: プログラムは最初の実行時は完全に動作しますが、戻るボタンを押して閉じてから再度開くと、その場合、イメージ ビューは更新されなくなります。アプリを強制終了すると、アプリを閉じて再度開くまで正常に動作します。

4

3 に答える 3

2

代わりにView.post(...)を使用してみてください。

于 2012-07-09T23:04:15.157 に答える
0

新しいHandler(Looper.getMainLooper())。post(...);を使用します。

これは、バックグラウンドスレッドから作成することもできます。

于 2012-07-10T14:42:58.160 に答える
0

Runnable がアクティビティへの参照を閉じているようです。戻ってアクティビティを再開すると、古いアクティビティは破棄され、新しいインスタンスが作成されます。バックグラウンド スレッドは元のアクティビティに変更を加え続けますが、これはもはや存在しないため、そのビューに変更を加えても効果はありません。

アクティビティが一時停止または停止されたときに更新スレッドを適切に停止し、アクティビティが再開または開始されたときに再起動する必要があります (これも必要に応じて)。実際に表示されているアクティビティを常に更新していることを確認してください。

于 2013-03-20T20:29:51.017 に答える