1

スレッドから作成された他のトーストではなく、「最初の」トーストのみが表示されるのはなぜですか?

public class BannerExample extends Activity {

    @Override
    public void onCreate(final Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        Toast toast = Toast.makeText(this, "first toast", Toast.LENGTH_SHORT);
        toast.show();

        new MyThread(this).start();

    }

    class MyThread extends Thread {

        private Context context;

        public MyThread(Context context) {
            this.context = context;
        }

        public void run() {

            Looper.prepare(); // An exception told me to add this - i have no clue why

            for (int i = 0; i < 3; i++) {

                try {
                    sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                Toast toast = Toast.makeText(context, i + "whoho", Toast.LENGTH_SHORT);
                toast.show();
            }

        }

    }

}
4

1 に答える 1

1
  1. を呼び出すべきではありませんLooper.prepare。何か間違ったことをしていたため、例外が発生していました。
  2. トーストは UI ツールキットの一部であるため、UI スレッドからアクセスする必要があります。これが、例外が発生した理由です。
  3. これはUIスレッドで自動的に実行されるため、トーストを作成するメソッドに交換ThreadAsyncTaskて使用することをお勧めします。onProgressUpdateそれ以外の場合は、ハンドラーを使用する必要があります。
  4. getBaseContext現在のアクティビティからのコンテキストではなく、コンテキストをコンストラクターに渡します
于 2011-03-27T19:17:55.163 に答える