Android上Service和Activity的通信

2023-12-01

Android 上 Activity 和 Service 之间的通信方式有哪些?

今天我学习了如何通过从 Activity 发送 Intent 并使用 BroadcastReceiver 进行回复来进行通信。

我还有哪些选择?有人有这方面的教程/参考吗?

这个问题的答案是:

活动与服务进行通信的方式有多种,反之亦然。本节讨论不同的方法并给出使用建议。

5.1.活动绑定到本地服务 如果Service与Activity在同一个进程中启动,则Activity可以直接绑定到Service。这是一种相对简单有效的沟通方式。

5.2.使用接收器 您还可以使用动态注册的接收器进行通信。例如,您的活动可以动态注册接收器,并且服务发送相应的事件。

5.3. AIDL 用于不同进程中的服务 要绑定到在不同进程中运行的服务,您需要使用进程间通信(IPC),因为数据需要在不同进程之间发送。为此,您需要创建一个 AIDL 文件,该文件看起来类似于 Java 接口,但以 .aidl 文件扩展名结尾,并且只允许扩展其他 AIDL 文件。

如果您的服务应该提供给其他应用程序,则需要这种方法,否则您应该更喜欢本地服务。

5.4.将 Intent 数据和捆绑发送到服务 该服务从启动的 Android 组件接收数据并可以使用该数据。

5.5.处理者和信使 如果服务应该与 Activity 进行通信,它可以通过从 Activity 接收的 Intent 数据接收 Messenger 类型的对象。如果 Messenger 绑定到活动中的处理程序,则服务可以将 Message 类型的对象发送到活动。

Messenger 是可打包的,这意味着它可以传递到另一个进程,并且您可以使用此对象将消息发送到活动中的处理程序。

Messenger 还提供了 getBinder() 方法,该方法允许将 Messenger 传递给 Activity。因此,活动可以向服务发送消息。

谢谢http://www.vogella.com/articles/AndroidServices/article.html


Activity 连接到服务的方式:

  1. 广播:最简单的方法,实施BroadcastReciever在每个人中倾听他人的行动。

  2. Messenger:非常适合多种类型的客户,服务和客户都有一个Messenger,服务提供它的Messenger中onBind(),客户端使用自己的信使发送注册/取消注册消息replyTo()的消息。服务与客户信使。现在两者都可以发送/接收消息。

  3. IBinder:如果您需要成熟的远程 IPC。使用 AIDL 定义服务接口并将实现传递给客户端onBind().

Android 在线参考每个都有解释。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android上Service和Activity的通信 的相关文章

随机推荐

  • 更新时如何检查 Tensorflow 中梯度的 NaN?

    All 当您训练具有大量样本的大型模型时 某些样本在参数更新时可能会导致 NaN 梯度 我想找出这些样本 同时我不希望这批样本的梯度更新模型的参数 因为这可能会导致模型的参数为NaN 那么有人有解决这个问题的好主意吗 我的代码如下 Crea
  • 隐式删除默认构造函数与编译器不合成默认构造函数相同

    我正在学习 C 中的类 我才知道在某些情况可以隐式删除默认构造函数 另外 我读到 当我们有用户定义的构造函数时 编译器将不会自动合成默认构造函数 以我目前的理解 隐式删除默认构造函数与默认构造函数不自动合成时的情况有很大不同 我的意思是 在
  • 如果这个类没有 Dispose 方法,它如何实现 IDisposable?

    FtpWeb响应实现 IDisposable 但它没有 Dispose 方法 这怎么可能 它在基类WebResponse中实现 参见http msdn microsoft com en us library system net webre
  • 用于检查输入是否为整数的 C++ 修复[重复]

    这个问题在这里已经有答案了 例如 如果我输入 2a 它不会显示错误 也不会要求用户重新输入该值 我该如何解决 while std cin fail std cout lt lt ERROR enter a number lt lt std
  • 如何使用Guice的@Singleton?

    我需要创建某个类的一个实例 并且这个实例需要可以从代码中的任何位置访问 所以 我找到了 Guice 并且我想使用这个包中的 Singleton 但我没有找到任何示例或一些文档来说明如何使用它以及如何进行声明 Singleton 非常容易使用
  • Addhandler、button.click 未使用 VB.NET 触发

    我遇到了按钮和 AddHandler 的问题 仅当我在 Page load 中使用 AddHandler Button1 click AddressOf 时它才有效 但如果我在子例程之一中动态创建按钮 则该事件不会触发 例如
  • 在大图像中绘制边界框

    我有一个大的二值图像 4k x 7k 像素 我想从中提取整个黄色部分作为单个矩形 我尝试了二元腐蚀来均匀黄色区域内的特征 然后我用了bbox的方法skimage regionprops但对于带有一个大 bbox 的大图像来说 它似乎工作得不
  • 在 html 中创建不可见的文本字段?

    我正在尝试将 html 代码放入我老板提供的设计模型中 并且一些美学 例如搜索栏的形状 有点奇怪和复杂 作为一个简单的解决方案 我想我只需将一个文本字段放在搜索栏的图像上 但我无法让它工作 谁能建议一种方法 将文本字段分层在图像上 使其不可
  • R:根据嵌套组计算比例

    我正在使用 R 编程语言 我有以下数据集 set seed 123 library dplyr Patient ID 1 5000 gender lt c Male Female gender lt sample gender 5000 r
  • 尝试使用 PDO 更新记录

    我更新了问题代码 但仍然有问题 没有错误 但没有更新记录 还需要弄清楚如何写入记录 更新成功 我被困在这个更新页面了
  • 无法打开数据库-Android

    我正在使用 SQL 开发一个简单的 Android 应用程序 我遵循以下指南 http www reigndesign com blog using your own sqlite database in android applicati
  • 使用 AVCaptureSession 和 AVAssetWriter 翻转相机时无缝录音

    我正在寻找一种在前后摄像头之间切换时保持无缝音轨的方法 市场上的许多应用程序都可以做到这一点 一个例子是 SnapChat 解决方案应使用 AVCaptureSession 和 AVAssetWriter 此外 它不应该明确使用 AVMut
  • .Theninclude 用于 Entity Framework Core 2 中的子实体

    以前 使用 net 4 5 2 和 EF 6 时 我有一个通用的Get接受多个的方法包括如下 public abstract class DataContext IdentityDbContext
  • 获取特定时间范围内所有发生变化的文件

    Bash 中的一个非常基本的问题 但我似乎无法弄清楚 我正在寻找一个带有管道的单行命令 在 bash 中查找当前目录中上次在 13 15 到 13 30 之间更改的所有 py 文件 与日期无关 我想我可以用ls and cut但我不确定这是
  • Android - 从另一台设备访问 Google Drive appdata 文件夹,但应用程序相同

    我的应用程序设置为允许将备份保存到 Google Drive 应用程序数据文件夹 这一切在同一台设备上运行得非常好 当我进行备份时 删除应用程序的数据 然后恢复一切正常 但是 当我尝试在一台设备上备份 然后在另一台设备上安装并尝试恢复时 没
  • python opencv-寻找圆(太阳),图片中圆心的坐标

    我是新来的 也是编程方面的新手 我有一个问题 我有 16 位 bmp 文件中的太阳图片 图片看起来是黑色背景的白色圆圈 我想找到一个圆并在 x y 坐标中确定其中心 我有这个脚本 import cv import numpy as np o
  • 执行 a.out 文件时出现问题 (C++) MacOS Sierra 10.12.1

    我刚刚更新到 Sierra 似乎我的编译器由于某种原因崩溃了 我编写的代码在更新之前工作正常 所以我确信这不是问题 但现在当我尝试执行它时它就无法工作 这是输出 g source cpp a out dyld mach o but buil
  • 什么是套接字?这是一个过程吗?

    我正在研究操作系统概念 我发现套接字作为通信的端点 那么套接字到底是什么 它是系统通信的一个过程吗 提前致谢 通过阅读维基百科文章 我可以明白为什么您可能会感到困惑 套接字是一个虚拟设备 也就是说 它是一种用软件编写的设备 没有物理设备 因
  • 如何在 Struts 2 中使用 jQuery Ajax 检查唯一用户?

    我有任何应用程序email id是唯一的 并且当最终用户输入他的email id我已经通过 Ajax 触发了 SQL 查询 它检查这是否email id存在或不存在 直到这里它都工作正常但现在我如果那样怎么办email id存在 然后我想将
  • Android上Service和Activity的通信

    Android 上 Activity 和 Service 之间的通信方式有哪些 今天我学习了如何通过从 Activity 发送 Intent 并使用 BroadcastReceiver 进行回复来进行通信 我还有哪些选择 有人有这方面的教程