Android上的这两种交互方式之间有什么区别:
交互应该是异步的.
什么是各自的利弊?
这实际上取决于你想要实现的目标.在你问的情况下 - 交互应该是异步的,你没有理由不使用Intents.这种方式有两个好处:
如果您正在寻找此方法的更多技术优势:每次更改界面时,您都不必担心App#1,具体取决于生成的类代码.当您使用AIDL编写接口时(这是您实现名为"1"的服务模型的方式),ADT将消失并为您生成一组用于公开远程服务的类.当App#1将这些生成的类的不同版本添加到App#2时会出现问题.(相信你,与这些问题相关的错误信息不足以提供信息).
另一方面,这并不是说你应该完全避免远程服务模式; 它有许多有用的应用程序.这是我的解释变得有点"手工波浪"的地方,但希望你能理解我所说的要点.AIDL接口使您可以更直接地控制您正在呼叫的服务.而不是启动意图,捆绑一堆数据,并希望它将到达正确的服务(或活动,或其他处理程序),然后以正确的方式处理,最终结果将返回对你来说,你直接调用Remote类中的方法.您在该远程类中调用的方法是由App#2中编写的AIDL接口指定的方法(其功能类似于服务器) - 但您很快就会开始考虑线程之类的东西.您直接调用另一个进程中的代码 - 这意味着属于App#1的线程可以访问App#2中的对象和方法.
你如何处理App#1在App#2中调用代码的事实在很大程度上取决于你,但是我使用的方式(我相信推荐的方式,尽管如果有人知道不同,我希望他们会在这里纠正我)是在App#2中使用Handler.当App#1调用AIDL接口时,它调用的代码会向生活在App#2中的Handler发送一条消息,然后由属于App#2的线程调用 - 这意味着您知道应用的哪个部分正在访问哪些成员等等
这种控制流程有明显的优势,对我来说它感觉更"API-ish" - 但这并不是说它适合每个人的目的.我的经验也是通过AIDL接口编程更加错误和脆弱.虽然从技术上来说,它总是按照你告诉它要做的事情,但很容易告诉它做错事 - 或者更糟糕的是,误解了你完全告诉它的事情.我想说:在考虑编写AIDL服务之前,先用尽其他路线.
关于异步调用的注意事项:
所以你有两个非常灵活的接口可以在两个进程之间进行交互.两者都有不同的用途.
| 归档时间: |
|
| 查看次数: |
1973 次 |
| 最近记录: |