從後臺執行緒更新 UI

通常使用後臺執行緒來執行網路操作或長時間執行的任務,然後在需要時使用結果更新 UI。

這會產生問題,因為只有主執行緒才能更新 UI。

解決方案是使用 runOnUiThread() 方法,因為它允許你從後臺執行緒啟動 UI 執行緒上的程式碼執行。

在這個簡單的示例中,在建立 Activity 時啟動 Thread,執行直到隨機生成 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();
    }
}