gpt4 book ai didi

android - AIDL 与信使

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:54:26 24 4
gpt4 key购买 nike

要求:需要将来自不同进程的服务/契约(Contract)公开给其他应用。例如:getPhoneRecord(recordId)、deletePhoneRecord(phoneId)等
可能的解决方案:Messenger 或 AIDL

根据我的分析,我认为 AIDL 是唯一的选择,因为 Messenger 提供了一种非常通用的跨应用发送消息的方式。 Messenger 仅限于客户端的 send(Message) 和服务器端的 handleMessage(Message msg)。还有其他差异,例如多线程。但是,我关心从其他应用程序/消费者可以调用的服务定义 API 契约(Contract)。我的理解正确吗?

最佳答案

根据 Android 文档:

Most applications should not use AIDL to create a bound service, because it may require multithreading capabilities and can result in a more complicated implementation.

我只想确定 AIDL 是我最好的 friend 。因此,我想出了以下在 Android 中实现后台服务的总结:

广义上,Android 中的服务可以启动绑定(bind)

开始服务鉴于启动的服务执行单个操作并且不向调用方返回结果,因此它不能满足我的特定要求(将来自不同进程的服务/契约(Contract)暴露给其他应用程序。例如:getPhoneRecord(recordId), deletePhoneRecord(phoneId) 等)

绑定(bind)服务共有三种不同的口味

  1. 扩展 Binder 类 - 仅用于私有(private)服务,在应用内运行。不能跨越进程边界。所以我也不能用这个。
  2. 使用 Messenger - 提供了一种非常通用的跨应用发送消息的方式。 Messenger 仅限于客户端的 send(Message) 和服务器端的 handleMessage(Message msg)。
  3. 使用 AIDL - 赢家!

如果有人可以权衡我的决定,我将不胜感激。

关于android - AIDL 与信使,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25233720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com