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