【问题标题】:How to return an variable from a AsyncTask class to an fragment如何将变量从 AsyncTask 类返回到片段
【发布时间】:2015-09-18 21:41:18
【问题描述】:

我创建了多个片段,它们都需要来自服务器的数据。所以我创建了一个可重复使用的AsyncTask。它通过套接字连接到服务器,传输一些数据包并最终接收响应。如何从onPostExecute“动态”返回result(又名响应)?我创建了一个流程图来更好地解释自己。

【问题讨论】:

  • 扩展 yourAsyncTask 然后将监听器传递给它。一旦 onPostExecute 完成,则调用该侦听器。或者使用事件总线。 square.github.io/otto

标签: 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

    【讨论】:

      猜你喜欢
      • 2015-10-21
      • 2020-01-16
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      相关资源
      最近更新 更多