1

フォトアルバムをフリックするように、一連の写真をフリックするアプリを設計しています。かなり標準的なものだと思います。次の写真に自動的に変わる前に、写真を数秒間表示する必要があるため、写真を表示するスレッドを作成し、数秒待ってから次に進むことにしました。

Picthread(ImageView Image1) {
        this.image = Image1;

    }

    public void run(){

        showPicture(image);
        animal_array = new String[7];

        while (counter < 7){
            try{


                int timer = 0;

                while (timer < 2000){

                    sleep(500);

                    timer+=500;
                }
                image.post(new Runnable(){

                    public void run() {

                         showPicture(image);


                    }

                });



            }
             catch (InterruptedException e) {  
                } 
        }




    }

これは実際に機能しました。showPicturesは、画像を選択してImageViewに配置するだけの非常に簡単な方法です。私の問題のためにそれについて知る必要はありません。最初は機能しませんでしたが、logcatは、このスレッドで作成されなかったビュー階層のビューに触れることができないと言いました。それが何を意味するのかわからなかったので、

image.post(...)

コード。どちらがうまくいったか。私の主な質問は、なぜこれが必要だったのかということです。上記のコードを見ると、最初のshowPicture()メソッドはimage.post()コード内にありません。ただし、例外は登録されていません。わかりませんが、なぜ投稿が必要ないのですか?しかし、Imageはクラス変数であり、すべてのスレッドで表示できると思ったので、なぜ投稿する必要があるのでしょうか。私はそれがうまくいったことを嬉しく思いましたが、戸惑いました。

覚えておいてください。これは、些細な教科書の例以外のものをJavaでスレッド化する最初の試みです。だから私はまだかなり混乱しています。

ちなみに、結局、スレッド全体を捨てて、

new Thread(new Runnable() {
            public void run() {...}
4

1 に答える 1

1

GUIで「何か」を行うときは、常にGUIスレッドを使用する必要があります。これがView.post(Runnable)、GUIスレッドがランナブルの動作を確実に実行するようにするためです。

あなたのshowImage作品が一度でもそれが常に機能することを意味するわけではありませんが...

于 2010-11-17T15:42:56.047 に答える