我正在编写一个Android库,可以向一堆不同的服务发出http请求。目前,我在AsyncTask中发生了http请求,并使用onPostExecute方法回调给应用程序提供的委托。因此,基本上开发人员调用他们想要的方法而不必担心创建AsyncTask。
但是,我开始怀疑是否应该异步进行这些调用或使库完全同步,并将开发人员的责任放在他们的应用程序中的AsyncTasks中。关于这样的事情有最好的做法吗?
答案 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...
}
}