Android 让 Service 与 Activity 进行通信?

标签 android service android-activity communication

我的应用程序中目前有一个服务和一个 Activity 。

我目前将 Service 绑定(bind)到 Activity,但没有使用 AIDL,因为 Service 和 Activity 位于同一个应用程序中。

这允许我在需要时从 Activity 内的 Service 调用方法,但是它不允许我在需要时从 Service 内调用 Activity 的方法。

谁能评论一下实现这一目标的最佳方法是什么?

我可以使用 Intent ,但有其他选择吗?

我希望服务和 Activity 之间有紧密的通信,我希望能够在事件发生时从我的服务调用 Activity 方法。

感谢奥格尼安的出色建议。

编辑2:

我现在可以按照我想要的方式工作,但是我遇到了一个问题。

我的服务获取状态更新,然后我的 Activity 应该对从服务发送的更新使用react。

问题是,当我开始 Activity 时,我会在调用 onBind 之前获取拨号状态和连接状态,并获取 iCallDialogActivity 的实例。

logcat 的以下输出可能会让事情变得更清楚。

06-28 10:56:48.702: DEBUG/TestPhone(3498): Status: EStatusDialling
06-28 10:56:48.751: DEBUG/TestPhone(3498): Status: EStatusConnected
06-28 10:56:49.122: DEBUG/TestPhone(3498): Status: onBind Called    <------------- 
06-28 10:56:49.141: DEBUG/TestPhone(3498): Status: iCallDialogActivity instance  <------------- 
06-28 10:56:51.641: DEBUG/TestPhone(3498): Status: EStatusDisconnecting
06-28 10:56:51.651: DEBUG/TestPhone(3498): Status: EStatusIdle

当我收到拨号和连接状态通知时,我需要能够使用我的 iCallDialogActivity。

但这给了我一个 NullPointer 异常,因为它在我的 Activity 启动时没有及时创建,绑定(bind)是我在 Activity onCreate() 中做的第一件事。

有没有办法让它立即绑定(bind)?

最佳答案

您不能直接调用 Activity 实例上的方法,您必须使用与通过 AIDL 调用 Service 方法相同的 IPC 机制。

首先,您需要声明一些您希望公开为回调的方法。在单独的 .aidl 文件中执行此操作。然后将该回调的 setter 添加到服务的 AIDL,例如:

void setMyCallback(inout IMyCallback myCallback);

如果您创建了 IMyCallback.aidl。请记住将其导入到Service的.aidl中,即使它位于同一个包中。在您的 Activity 中,从该 .aidl 实例化一个 stub ,并在回调之前将其传递给服务。

关于Android 让 Service 与 Activity 进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3116744/

相关文章:

android - 无法在 Ubuntu 中的 BQ Aquaris E5 HD 上运行 Android 应用程序

android - Android-Beagleboard 串口编程

java - 如何让 Android 服务保持 phonegap 用户界面的活力

java - 在 Android 上从 cocos2d-x Activity 切换到另一个 Activity 时应用程序崩溃

java - 在特定时间不活动后注销

安卓背景图片分辨率

c++ - LG TV Control through serial using Windows service runs about 30 seconds after PC power on - 如何更快地启动服务?

android - 我需要将 AIDL 文件放在哪里?

android - startIntentSenderForResult 已弃用 Android

android - 如何在Android中实现NavigationView的可扩展菜单