从后台线程更新 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();
    }
}