我有一个android库,它可以进行大量的同步网络调用,我打算在我的应用程序中使用这个库。例如,当应用程序启动时,我需要显示用户列表、用户组列表和一般信息。为此,我已经有了一个主活动,它包含三个片段(两个列表片段用于列表,一个正常片段),用于显示三件事,用户列表和用户组列表的数据来自前面提到的库中的同步网络调用。我的问题是,使用这些同步库调用来获取要由片段显示的数据的正确(推荐)方式是什么。根据我的理解,有三种主要的方法可以做到这一点。
-
使用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个中的任何一个吗?谢谢
您应该使用Volley Library进行网络操作,因为截击维护了调用完美网络api所需的所有必要方法。点击此处