Android库:在内部处理异步http请求?

时间:2011-07-26 18:08:21

标签: android android-library

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

但是,我开始怀疑是否应该异步进行这些调用或使库完全同步,并将开发人员的责任放在他们的应用程序中的AsyncTasks中。关于这样的事情有最好的做法吗?

3 个答案:

答案 0 :(得分:2)

根据我作为多个具有广泛API的项目的一部分的经验,在大多数情况下我们决定提供异步API,最后,我们必须提供额外的同步API或使旧的异步API过时使用新的同步API。

当我编写API时,我尽量避免对最终用户进行任何假设。 我想你会发现以下有趣(或者我希望如此): How to Write Good API

答案 1 :(得分:1)

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

但是如果你想要更灵活,那就把决定留给开发者,不管他们是想把它放在异步还是不同步。

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

答案 2 :(得分:-1)

我认为在您的库中异步调用是个好主意。要在收到数据时通知调用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...
        }
    }