如何 return 从 AsyncTask class 到片段的变量
How to return an variable from a AsyncTask class to an fragment
我创建了多个片段,它们都需要来自服务器的数据。所以我创建了一个可重复使用的AsyncTask
。它通过套接字连接到服务器,传输一些数据包并最终接收到响应。我怎样才能 'dynamically' return 来自 onPostExecute
的 result
(a.k.a 响应)?我创建了一个流程图来更好地解释我自己。
AsyncTask
可以简单地调用 onPostExecute
中提供的 Fragment
中的回调,或者 AsyncTask
可以是给定的嵌套 class片段.
例如
public class MyFragment extends Fragment {
void onResult(Result result) {...}
private class MyTask extends AsyncTask<String, Void, Result> {
doInBackground(...) {}
onPostExecute(Result result) {
onResult(result);
}
}
}
这样做的缺点是在您的任务完成之前一直保留片段的引用。如果你的任务总是最终终止并且没有被任何静态上下文引用,那么没关系,因为内存最终会被收集。
您可以使用一个侦听器,它使用异步任务在每个片段中实现。使用所需的结果参数在接口中定义一个方法。
您可以将引用传递给异步任务并将其存储在 weak reference
中
我创建了多个片段,它们都需要来自服务器的数据。所以我创建了一个可重复使用的AsyncTask
。它通过套接字连接到服务器,传输一些数据包并最终接收到响应。我怎样才能 'dynamically' return 来自 onPostExecute
的 result
(a.k.a 响应)?我创建了一个流程图来更好地解释我自己。
AsyncTask
可以简单地调用 onPostExecute
中提供的 Fragment
中的回调,或者 AsyncTask
可以是给定的嵌套 class片段.
例如
public class MyFragment extends Fragment {
void onResult(Result result) {...}
private class MyTask extends AsyncTask<String, Void, Result> {
doInBackground(...) {}
onPostExecute(Result result) {
onResult(result);
}
}
}
这样做的缺点是在您的任务完成之前一直保留片段的引用。如果你的任务总是最终终止并且没有被任何静态上下文引用,那么没关系,因为内存最终会被收集。
您可以使用一个侦听器,它使用异步任务在每个片段中实现。使用所需的结果参数在接口中定义一个方法。 您可以将引用传递给异步任务并将其存储在 weak reference
中