api 调用等网络相关任务应该放在 Activity 生命周期的什么地方?
Where should network related task like api calling be be placed in Activity lifecycle?
我正在创建一个 android 应用,目前只有一个 activity。此 activity 调用 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) {
}
然后你像这样在你的 onCreate 中调用你的请求
JSONAsyncTask task=new JSONAsyncTask();
task.execute();
查看文档以获取更多信息https://developer.android.com/reference/android/os/AsyncTask
在 onCreate 中进行网络调用很好,把我的两分钱放进去,我建议你使用我使用的这种良好做法。
-研究网络调用并尝试确定需要多少时间以及UI线程是否需要结果, 对于长操作不应该使用 AsyncTask
来自文档
AsyncTasks should ideally be used for short operations (a few seconds
at the most.) If you need to keep threads running for long periods of
time, it is highly recommended you use the various APIs provided by
the java.util.concurrent package such as Executor, ThreadPoolExecutor
and FutureTask.
-永远不要重新发明轮子你可以使用很多库来进行网络操作,比如:
- 改造
- OkHttp
- 截击
- AndroidFastNetworking
-始终处理错误! 没有什么比由于某些连接错误导致的无限加载程序更烦人的了,请检查互联网连接 BroadCast Receiver
我正在创建一个 android 应用,目前只有一个 activity。此 activity 调用 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) {
}
然后你像这样在你的 onCreate 中调用你的请求
JSONAsyncTask task=new JSONAsyncTask();
task.execute();
查看文档以获取更多信息https://developer.android.com/reference/android/os/AsyncTask
在 onCreate 中进行网络调用很好,把我的两分钱放进去,我建议你使用我使用的这种良好做法。
-研究网络调用并尝试确定需要多少时间以及UI线程是否需要结果, 对于长操作不应该使用 AsyncTask
来自文档
AsyncTasks should ideally be used for short operations (a few seconds at the most.) If you need to keep threads running for long periods of time, it is highly recommended you use the various APIs provided by the java.util.concurrent package such as Executor, ThreadPoolExecutor and FutureTask.
-永远不要重新发明轮子你可以使用很多库来进行网络操作,比如:
- 改造
- OkHttp
- 截击
- AndroidFastNetworking
-始终处理错误! 没有什么比由于某些连接错误导致的无限加载程序更烦人的了,请检查互联网连接 BroadCast Receiver