サーチ…


スレッドの例とその説明

アプリケーションを起動すると、まずメインスレッドが実行されます。このメインスレッドは、アプリケーションのすべてのUIコンセプトを処理します。 UIを必要としないタスクを長く実行したい場合は、そのタスクをバックグラウンドで実行するためにthreadを使用します。

ブローを記述するスレッドの例を次に示します。

new Thread(new Runnable() {
    public void run() {
        for(int i = 1; i < 5;i++) {  
            System.out.println(i);  
        }
    }
}).start();

スレッドを実行するためのThread.run()メソッドを持つThreadオブジェクトを作成してスレッドを作成することができます。ここでrun()メソッドはstart()メソッドによって呼び出されます。

MultiThreadingと呼ばれる複数のスレッドを独立して実行することもできます。このスレッドは、現在実行中のスレッドが指定された時間だけスリープ(一時的に実行を停止)するスリープ機能も備えています。しかし、sleepはInterruptedExceptionをスローします。したがって、このようにtry / catchを使用して処理する必要があります。

try{Thread.sleep(500);}catch(InterruptedException e){System.out.println(e);}

バックグラウンドスレッドからのUIの更新

ネットワーク操作や長時間実行されるタスクを実行するためのバックグラウンドスレッドを使用し、必要に応じて結果をUIで更新するのが一般的です。

メインスレッドだけがUIを更新できるので、これは問題を引き起こします。

解決策は、 runOnUiThread()メソッドを使用することです。バックグラウンドスレッドからUIスレッドでコードを実行できるようにするためです。

この単純な例では、アクティビティの作成時にスレッドが開始され、マジックナンバー42がランダムに生成されるまで実行され、 runOnUiThread()メソッドを使用してこの条件が満たされるとUIが更新されます。

public class MainActivity extends AppCompatActivity {

    TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView) findViewById(R.id.my_text_view);

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    //do stuff....
                    Random r = new Random();
                    if (r.nextInt(100) == 42) {
                       break;
                    }
                }

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mTextView.setText("Ready Player One");
                    }
                });
            }
        }).start();
    }
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow