Android在new Thread(new Runnable() { @Override public void run() {执行函数,如何在函数执行完返回数据
时间: 2024-09-19 16:10:57 浏览: 45
Android开发笔记之:Handler Runnable与Thread的区别详解
在Android中,在一个新的线程里通过Runnable和Thread结合执行任务并希望在主线程中获取结果,你需要使用`Handler`或者`AsyncTask`来传递数据。这是因为Java的`run()`方法是在子线程中执行的,而直接更新UI需要在主线程。以下是两种方法:
1. 使用`Handler`:
```java
new Thread(new Runnable() {
@Override
public void run() {
// 执行耗时操作
String result = ...;
// 创建一个Handler实例,并使用它来在主线程中发送消息
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
// 在这里处理主线程回调
handleResult(result);
}
});
}
}).start();
```
在这个例子中,`handleResult(result)`会在UI线程中被调用。
2. 使用`AsyncTask`:
```java
class MyAsyncTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
// 执行耗时操作
String result = ...;
return result;
}
@Override
protected void onPostExecute(String result) {
// 这部分在主线程运行,可以更新UI
handleResult(result);
}
}
// 实例化并启动
MyAsyncTask task = new MyAsyncTask();
task.execute();
```
`onPostExecute()`会确保结果在主线程上被处理。
阅读全文