如何 return 从 AsyncTask class 到片段的变量

How to return an variable from a AsyncTask class to an fragment

我创建了多个片段,它们都需要来自服务器的数据。所以我创建了一个可重复使用的AsyncTask。它通过套接字连接到服务器,传输一些数据包并最终接收到响应。我怎样才能 'dynamically' return 来自 onPostExecuteresult (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