我们正在构建一个基于位置的消息应用程序,它使用 Parse.com 作为后端
(Parse.com 类似于 Urban Airship/PubNub 等),我们现在想要切换到我们自己的后端以获得更好的控制。为此,我们构建了一个基于 Node.js 的后端,其功能通过 REST API 公开
为了使用这个 API,我们想要构建一个 Android 库(类似于Parse.com 的 Android SDK https://parseplatform.github.io/docs/android/guide/)它抽象了所有 HTTP 请求/响应或 REST API 调用,并为各种操作(如 getUsers()、sendMessage() 等)提供直接函数
在Android中实现REST API客户端的方法:
- Using IntentService + 结果接收器 http://neilgoodman.net/2012/01/01/modern-techniques-for-implementing-rest-clients-on-android-4-0-and-below-part-2/
- Service
- 异步任务
- Using Loaders http://neilgoodman.net/2011/12/26/modern-techniques-for-implementing-rest-clients-on-android-4-0-and-below-part-1/
现在,考虑到我们想要构建一个 android 库,并且在用户与应用程序交互时可能会同时进行 REST API 调用,哪种方法最适合继续进行?我也愿意接受其他建议/推荐。
UPDATE:我们首先使用 IntentService + ResultReceiver 构建了自己的库,效果很好。但后来我们偶然发现Android 异步 HTTP http://loopj.com/android-async-http/。用它。这很棒!
我见过的基于 Google IO Pro Tips 2010 的最佳实现是 RoboSpice 库,它基于 REST,并且非常巧妙地与 Activity 生命周期配合使用,不会泄漏内存。
Quick 信息图表 https://raw.github.com/octo-online/robospice/master/gfx/RoboSpice-InfoGraphics.png图书馆是here https://github.com/octo-online/robospice
- 加载器是为数据库而不是 REST 设计的,它们会在活动重置时重置,这意味着您会丢失数据。
- 异步任务,只是没有。
- 意图服务 + 结果接收器基本上是 RoboSpice 的工作方式,所以如果您正在构建自己的库,我会采用这种方法!
- Service 也很好,类似于 IntentService 方法,但 IntentService 在这种情况下工作得更好一些。
The Service
方法也许更好,看看 robospice 服务 https://github.com/octo-online/robospice/blob/release/robospice-core-parent/robospice/src/main/java/com/octo/android/robospice/SpiceService.java他们使用一个ExecutorService
这终止了Service
当它用完时Requests
就工作而言,这是 Java 并发性多于 Android 特有的并发性。需要注意的是,服务在处理请求时运行,如果没有剩余请求,则服务会终止自身。
使用的优点ExecutorService
或任何类型的线程池,您可以定义一次可以运行多少个请求。除非你的连接速度非常快,否则我建议最多 2-4 个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)