与网络相关的任务(如 api 调用)应该放在活动生命周期中的什么位置?



我正在创建一个Android应用程序,该应用程序目前只有一个活动。此活动调用 api 以获取 JSON 响应并填充片段。收到 JSON 响应后,我将更新数据集并通知适配器。目前,JSON 请求在onCreate方法中调用。

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

我很想知道实现这一目标的最佳实践是什么。

最佳做法是在执行网络操作时使用异步事件,因为根据您的服务器响应时间和网络速度,您可能会延迟收到响应并阻止您的 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) {
}

你在on中调用你的请求像这样创建

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

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

在onCreate中进行网络调用很好,把我的两分钱放进去,我建议你使用这个好习惯。

-研究网络调用并尝试确定需要多少时间以及UI线程是否需要结果,对于长时间操作,不应使用AsyncTask

从文档

理想情况下,AsyncTasks 应该用于短操作(几秒钟) 最多。如果您需要长时间保持线程运行 时间,强烈建议您使用 java.util.并发包,如 Executor、ThreadPoolExecutor 和未来任务。

-永远不要重新发明轮子,您可以使用大量库进行网络操作,例如:

  • 改造
  • OkHttp
  • 截击
  • 安卓快速网络

-始终处理错误!没有什么比由某些连接错误引起的无限加载程序更烦人的了,请使用 BroadCast 接收器检查互联网连接

最新更新