android开发教程之子线程中更新界面


在Android开发中,由于UI线程(主线程)负责处理所有的UI更新,因此直接在子线程中更新界面是不被允许的,这会导致`CalledFromWrongThreadException`异常。为了在子线程中更新界面,我们需要使用特定的机制来在UI线程上执行UI更新操作。最常用的方法是使用`runOnUiThread()`方法或者通过`Handler`来处理。

### 使用`runOnUiThread()`方法

在Activity或Fragment中,你可以直接调用`runOnUiThread()`方法,并传递一个Runnable,该Runnable中的代码将在UI线程上执行。


// 假设这是在你的子线程中
new Thread(new Runnable() {
    @Override
    public void run() {
        // 执行一些耗时的操作

        // 回到UI线程更新界面
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // 更新UI的代码,比如更新TextView的文本
                textView.setText("更新后的文本");
            }
        });
    }
}).start();

### 使用`Handler`

另一种方法是使用`Handler`。你可以在主线程中创建一个`Handler`,然后在子线程中通过发送消息(Message)或Runnable到Handler来更新UI。


// 在主线程(比如Activity的onCreate方法中)创建Handler
final Handler uiHandler = new Handler();

// 在子线程中
new Thread(new Runnable() {
    @Override
    public void run() {
        // 执行一些耗时的操作

        // 使用Handler更新UI
        uiHandler.post(new Runnable() {
            @Override
            public void run() {
                // 更新UI的代码
                textView.setText("通过Handler更新的文本");
            }
        });
    }
}).start();

这两种方法都是在Android开发中常用的在子线程中更新UI的方式。选择哪一种取决于你的具体需求和偏好。