Handler子线程和主线程不在一个类文件中要怎么传值,例子
时间: 2024-05-01 19:19:25 浏览: 109
可以使用Handler的sendMessage()和 handleMessage()方法在子线程和主线程之间传递消息和数据。以下是一个简单的例子:
在主线程中创建一个Handler对象,并在它的handleMessage()方法中处理子线程发来的消息:
```java
public class MainActivity extends AppCompatActivity {
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// 处理子线程传来的消息
int data = msg.arg1;
Log.d(TAG, "Received data from sub thread: " + data);
}
};
// 在主线程中启动子线程,将Handler对象传递给子线程
public void startSubThread() {
SubThread subThread = new SubThread(mHandler);
subThread.start();
}
}
```
在子线程中通过Handler的sendMessage()方法向主线程发送消息:
```java
public class SubThread extends Thread {
private Handler mHandler;
public SubThread(Handler handler) {
mHandler = handler;
}
@Override
public void run() {
// 在子线程中处理耗时操作
int data = 123;
// 向主线程发送消息和数据
Message msg = mHandler.obtainMessage();
msg.arg1 = data;
mHandler.sendMessage(msg);
}
}
```
这样在子线程和主线程之间就可以传递数据和消息了。注意,在子线程中不能直接更新UI,否则会抛出异常,必须在主线程中更新UI。
阅读全文