我正在编写一个向一堆不同服务发出 http 请求的 Android 库。目前,我在 AsyncTask 中发生了 http 请求,并在 onPostExecute 方法中回调应用程序提供的委托,并提供结果。因此,基本上开发人员调用他们想要的方法而不用担心创建 AsyncTask。
但是,我开始怀疑我是否应该异步进行这些调用,或者让库完全同步,并让开发人员负责将方法调用放在他们的应用程序中的 AsyncTasks 中。有没有关于这样的事情的最佳实践?
我正在编写一个向一堆不同服务发出 http 请求的 Android 库。目前,我在 AsyncTask 中发生了 http 请求,并在 onPostExecute 方法中回调应用程序提供的委托,并提供结果。因此,基本上开发人员调用他们想要的方法而不用担心创建 AsyncTask。
但是,我开始怀疑我是否应该异步进行这些调用,或者让库完全同步,并让开发人员负责将方法调用放在他们的应用程序中的 AsyncTasks 中。有没有关于这样的事情的最佳实践?
根据我参与多个具有广泛 API 的项目的经验,在大多数情况下,我们决定提供异步 API,最终,我们不得不提供额外的同步 API,或者使用新的同步 API 淘汰旧的异步 API。
当我编写 API 时,我会尽量避免对最终用户的任何假设。我认为您会发现以下有趣的内容(或者我希望如此): 如何编写好的 API
如果您想要严格,请将异步任务放在您的库中,这样开发人员就别无选择,只能异步执行请求(这已在您的库中完成)。
但是,如果您想更加灵活,请让开发人员决定是否要将其置于异步状态。
如果我是你,我会将决定权留给开发人员,因为库的目的是执行请求并获得结果,而不是如何执行请求。这样,您的库将适合任何开发人员的愿望,而不是相反。
我认为在你的库中异步调用是个好主意。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...
}
}