Android:处理同步网络调用
Posted
技术标签:
【中文标题】Android:处理同步网络调用【英文标题】:Android: Handling synchronous network calls 【发布时间】:2017-06-02 09:20:00 【问题描述】:我有一个进行大量同步网络调用的 android 库,我打算在我的应用程序中使用这个库。例如,当应用程序启动时,我需要显示用户列表、用户组列表和一般信息。为此,我已经有一个主要活动,它包含三个片段(两个列表片段和一个普通片段)用于显示三个内容,用户列表和用户组列表的数据来自前面提到的库中的同步网络调用.我的问题是,使用这些同步库调用来获取要由片段显示的数据的正确(推荐)方法是什么。据我了解,有 3 种主要方法可以做到这一点。
使用 AsyncTask 类,所以对于库方法 getUserList(...) 我必须创建一个专用的 AsyncTask 类。
public class FetchTask extends AsyncTask<Void, Void, Boolean>
private List<User> users;
protected Boolean doInBackground(Void... params)
users = getUserList(...);
protected void onPostExecute(final Boolean success)
//inform user list fragment that user data has been fetched successfully
如果我 使用这个方法意味着我必须创建一个 asyncTask 类 对于每个网络调用(这是一个很大的数量)并且有 它在完成时与 UI 线程通信
直接分离一个线程来包装同步调用
public class UserListFragment extends ListFragment
private List<User> users;
private ArrayAdapter<User> userAdapter
....
protected void OnCreate(Bundle savedInstance)
super.OnCreate
new Thread(new Runnable()
public void run()
users = getUserList()
//notify array adapter that data has changed
)
此方法还要求我对我进行的每个同步方法调用都重复此操作,并且很容易变得笨拙。
-
最后一种方法是使用 Threadpoolexecutor,我必须承认我
还没有完全理解这个方法。
再次,我的问题是实现这一目标的首选方法是什么?是我列出的 3 个中的任何一个吗?谢谢。
【问题讨论】:
不要将 AsyncTask 用于网络调用。使用任何网络库 我建议你使用 RetrofitDo not use an AsyncTask for a network call
。废话@超人。使用 AsyncTask 或线程是要走的路。你甚至必须这样做。
没有推荐的方式。只需尝试所有这些,然后使用其中一个。您将首先显示一个新的 gui。然后启动一个任务或线程,最后更新 gui。
【参考方案1】:
您应该使用 Volley 库进行网络操作,因为 volley 维护了调用完美网络 api 所需的所有必要方法。 点击Here
【讨论】:
库已经使用 HttpURLConnection 进行网络调用,问题是调用是同步的。我想找到一种将这些同步调用包装在异步进程中的方法。以上是关于Android:处理同步网络调用的主要内容,如果未能解决你的问题,请参考以下文章