【问题标题】:How to return an variable from a AsyncTask class to an fragment如何将变量从 AsyncTask 类返回到片段
【发布时间】:2015-09-18 21:41:18
【问题描述】:
我创建了多个片段,它们都需要来自服务器的数据。所以我创建了一个可重复使用的AsyncTask。它通过套接字连接到服务器,传输一些数据包并最终接收响应。如何从onPostExecute“动态”返回result(又名响应)?我创建了一个流程图来更好地解释自己。
【问题讨论】:
标签:
android
class
android-fragments
android-asynctask
code-reuse
【解决方案1】:
AsyncTask 可以简单地在onPostExecute 中提供的Fragment 中调用回调,或者AsyncTask 可以是给定片段的嵌套类。
例如
public class MyFragment extends Fragment {
void onResult(Result result) {...}
private class MyTask extends AsyncTask<String, Void, Result> {
doInBackground(...) {}
onPostExecute(Result result) {
onResult(result);
}
}
}
这样做的缺点是在您的任务完成之前保留片段的引用。如果您的任务总是最终终止并且没有被任何静态上下文引用,那么这很好,因为最终会收集内存。
【解决方案2】:
您可以使用侦听器,该侦听器使用异步任务在每个片段中实现。使用所需的结果参数在接口中定义一个方法。
您可以将引用传递给异步任务并将其存储在weak reference