在 Android 开发中,当我们需要从子线程获取网络数据并更新 UI 时,Handler 是最常用的桥梁。系统规定 UI 操作必须在主线程执行,而耗时任务放在主线程会导致 ANR(应用无响应)。因此,将耗时逻辑放入子线程,再通过 Handler 回调到主线程更新界面,是标准的异步处理模式。
基础用法示例
创建一个 Handler 实例并重写 handleMessage 方法,在这里进行 UI 操作。在子线程中构造 Message 并通过 Handler 发送,消息会自动投递到主线程。
public class MainActivity extends AppCompatActivity {
private static final int UPDATE_UI = 1;
private TextView mTextView;
// Handler 默认关联当前线程(即主线程)
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_UI:
// 这里运行在主线程,可以安全操作 UI
mTextView.setText(mTextView.getText().toString() + (int) msg.obj);
break;
default:
super.handleMessage(msg);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = findViewById(R.id.text_view);
( () {
{
Message.obtain(mHandler, UPDATE_UI, );
message.sendToTarget();
}
}).start();
}
}

