与网络相关的任务(如api调用)应放在活动生命周期的何处?

时间:2019-04-02 08:02:39

标签: java android android-networking

我正在创建一个目前只有一个活动的android应用。此活动调用一个API以获取JSON响应并填充Fragments。收到JSON响应后,我将更新数据集并通知适配器。当前,JSON请求是通过onCreate方法调用的。

同样,在每个片段中,我都需要从网络加载图像,所以我想知道是否也应该将其放置在onCreateView或其他地方?

我有兴趣了解实现此目标的最佳实践。

2 个答案:

答案 0 :(得分:1)

最佳做法是在做网络工作时使用异步事件,因为取决于服务器响应时间和网络速度,您可能会迟到响应,这会阻塞UI,这是不好的。

我建议您在调用API时集成AsyncTask

这里是一个示例

class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {


@Override
protected void onPreExecute() {
  super.onPreExecute();

}

@Override
protected Boolean doInBackground(String... urls) {
try {

   //here you make your api call and json parsing

} catch (IOException e) {
    e.printStackTrace();
} catch (JSONException e) {

    e.printStackTrace();
}
return false;
}

protected void onPostExecute(Boolean result) {

}

您可以像这样在onCreate中调用您的请求

JSONAsyncTask task=new JSONAsyncTask();
task.execute();

查看文档以获取更多信息https://developer.android.com/reference/android/os/AsyncTask

答案 1 :(得分:1)

在onCreate中进行网络通话很好,我在这里花了两美分,我向您建议我使用的这种良好做法。

-研究网络呼叫,并尝试确定需要多少时间,以及如果UI线程需要结果,则不应使用长时间的AsyncTask操作

来自文档

  

理想情况下,AsyncTasks应该用于简短的操作(几秒钟   最多。)如果您需要使线程长时间运行   时间,强烈建议您使用以下提供的各种API   java.util.concurrent包,例如Executor,ThreadPoolExecutor   和FutureTask。

-永远不要重新发明轮子,您可以在网络操作中使用很多库,例如:

  • 改造
  • OkHttp
  • 排球
  • AndroidFastNetworking

-始终处理错误!没有什么比由于某些连接错误而导致的无限加载程序更令人讨厌的了,请使用BroadCast Receiver

检查互联网连接