我在Head First Android Development
书中找到了包含不是来自主线程的UI使用情况的示例代码。
根据我的理解,run(){}
的内容在单独的线程中运行。第distanceView.setText(distanceStr);
行正在尝试使用不允许主线程访问的UI。我看错了吗
private void displayDistance()
{
final TextView distanceView = (TextView) findViewById(R.id.distance);
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run()
{
double distance = 0.0;
if (bound && odometer != null) {
distance = odometer.getDistance();
}
String distanceStr = String.format(Locale.getDefault(),"%1$,.2f miles", distance);
distanceView.setText(distanceStr);
handler.postDelayed(this, 1000);
}
});
}
答案 0 :(得分:3)
默认构造函数将此处理程序与当前线程的
Looper
关联。
因此,只要在主线程上调用displayDistance()
, Handler 就会在运行传递给它的任何Runnable
时使用主线程。