在使用 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/