【问题标题】:Android Library: Handle async http requests internally?Android 库:在内部处理异步 http 请求?
【发布时间】:2011-07-26 18:08:20
【问题描述】:

我正在编写一个 Android 库,它可以向一堆不同的服务发出 http 请求。目前,我在 AsyncTask 中发生了 http 请求,并在 onPostExecute 方法中回调应用程序提供的委托并返回结果。因此,基本上开发人员调用他们想要的方法而不用担心创建 AsyncTask。

但是,我开始怀疑是否应该异步进行这些调用,或者让库完全同步,并让开发人员负责将方法调用放在他们应用程序中的 AsyncTasks 中。有没有关于此类事情的最佳做法?

【问题讨论】:

    标签: android android-library


    【解决方案1】:

    根据我参与多个具有广泛 API 的项目的经验,在大多数情况下,我们决定提供异步 API,最终,我们不得不提供额外的同步 API,或者用新的 API 淘汰旧的异步 API同步 API。

    当我编写 API 时,我尽量避免对最终用户做出任何假设。 我认为您会发现以下有趣的内容(或者我希望如此): How to Write Good API

    【讨论】:

      【解决方案2】:

      如果您想要严格,请将异步任务放在您的库中,这样开发人员就别无选择,只能异步执行请求(您的库中已经完成)。

      但如果您想更加灵活,请让开发人员决定是否要将其置于异步状态。

      如果我是你,我会将决定权留给开发人员,因为库的目的是执行请求并获得结果,而不是如何执行请求。这样,您的库将适合任何开发人员的愿望,而不是相反。

      【讨论】:

        【解决方案3】:

        我认为在您的库中异步进行调用是个好主意。要在收到数据时通知调用Activity,您应该在Class 中定义一个抽象方法,在请求和处理完成后在类中调用该方法。然后使用您的Class 的用户将必须实现该方法,并且在处理完成时将调用该方法。例如:

            public class ProcessingClass{
                private void processData(){
                     //Async processing
                     .....
                     onProcessComplete();
                }
                public abstract void onProcessComplete(){
        
                }
            }
        

        然后假设在您的活动中,您可以执行以下操作:

            private class MyProcessingClass extends ProcessingClass{
                @Override
                public void onProcessComplete(){
                     //The task is complete...
                     //Update UI or something like this...
                }
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多