【问题标题】:Android: Handling synchronous network callsAndroid:处理同步网络调用
【发布时间】:2017-06-02 09:20:00
【问题描述】:

我有一个进行大量同步网络调用的 android 库,我打算在我的应用程序中使用这个库。例如,当应用程序启动时,我需要显示用户列表、用户组列表和一般信息。为此,我已经有一个主要活动,它包含三个片段(两个列表片段和一个普通片段)用于显示三个内容,用户列表和用户组列表的数据来自前面提到的库中的同步网络调用.我的问题是,使用这些同步库调用来获取要由片段显示的数据的正确(推荐)方法是什么。据我了解,有 3 种主要方法可以做到这一点。

  1. 使用 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 线程通信

  2. 直接分离一个线程来包装同步调用

    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
                }
            })
    
        }
     }
    

此方法还要求我对我进行的每个同步方法调用都重复此操作,并且很容易变得笨拙。

  1. 最后一种方法是使用 Threadpoolexecutor,我必须承认我 还没有完全理解这个方法。

再次,我的问题是实现这一目标的首选方法是什么?是我列出的 3 个中的任何一个吗?谢谢。

【问题讨论】:

  • 不要将 AsyncTask 用于网络调用。使用任何网络库
  • 我建议你使用 Retrofit
  • Do not use an AsyncTask for a network call。废话@超人。使用 AsyncTask 或线程是要走的路。你甚至必须这样做。
  • 没有推荐的方式。只需尝试所有这些,然后使用其中一个。您将首先显示一个新的 gui。然后启动一个任务或线程,最后更新 gui。

标签: java android multithreading android-fragments android-asynctask


【解决方案1】:

您应该使用 Volley 库进行网络操作,因为 volley 维护了调用完美网络 api 所需的所有必要方法。 点击Here

【讨论】:

  • 库已经使用 HttpURLConnection 进行网络调用,问题是调用是同步的。我想找到一种将这些同步调用包装在异步进程中的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多