gpt4 book ai didi

Java AsyncTask 将变量传递给主线程

转载 作者:太空狗 更新时间:2023-10-29 16:35:53 24 4
gpt4 key购买 nike

在另一个线程中使用 AsyncTask 完成联网后,我一直在尝试更改 textView。我尝试了无数种解决方案,但到目前为止都没有奏效。

我能够实现我的目标的唯一方法是使用 .get(),但它会暂时停止 UI 线程,这是我不想要的。

我还尝试过将 AsyncTask 用作外部类,并在中间使用包装类。

所以我的问题是,在不卡住主线程的情况下获取 doInBackground() 和 onPostExecute() 中使用的变量的最简单方法是什么?

最佳答案

这里有一个方法可以做到这一点。您可以在异步任务的参数中提供回调,做任何您想做的事情,然后他们从异步任务中取回值。

回调接口(interface):

public interface AsyncTaskCompleteListener<T> {
public void onTaskComplete(T result, int number);
}

异步任务:

public class LoadURL extends AsyncTask<String, Process, String> {

private AsyncTaskCompleteListener<String> callback;

public LoadURL(AsyncTaskCompleteListener<String> cb) {
this.callback = cb;
}

protected void onPreExecute() {}

protected String doInBackground(String... arg0) {
// do something
return content;
}

protected void onPostExecute(String content) {
if (callback != null)
callback.onTaskComplete(content,number);
}
}

Activity :

public class LoginActivity extends Activity implements AsyncTaskCompleteListener<String> {

@Override
protected void onCreate(Bundle savedInstanceState) {

LoadURL loadUrl = new LoadURL(LoginActivity.this);
loadUrl.execute(...);
}

@Override
public void onTaskComplete(String result, int number) {...}
}

在onTaskComplete中,你可以轻松修改你的TextView

关于Java AsyncTask 将变量传递给主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28854875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com