1

好的,所以我有一个带有 Activity (UI) 和 Service (background polling) 的 android 应用程序。两者使用 AIDL 错综复杂地连接(包括回调,因此它是双工通信、IPC 等)。

任何时候两人说话我都在使用它。

不过,我还扩展了 Application 类 - 以便两者可以共享公共数据对象。所以Application持有一个Service一直在使用的User对象,Activity在运行的时候也可以访问它。

应用程序还具有对 Activity 的 WeakReference(以避免上下文泄漏),因为用户有时会触发 UI 更新。

所以看起来像

Activity (UI) ---> Application <--- Service

我可以通过执行来触发服务中的 UI 事件

_app = (FooApplication)this.getApplication();
FooActivity uiRef = _app.getUIReference().get();
if (uiRef != null) {
   uiRef.updateSomeDisplay();
}

所以我不明白。当我只是弱引用 UI、查看它是否存在并调用它的方法时,为什么还要麻烦复杂的 AIDL 调用。

4

1 回答 1

0

AIDL 的重点是允许进程间通信。服务的重点是允许后台操作在与您的 UI 线程不同的进程中运行,以便即使您关闭应用程序,它们也可以继续运行。您将需要 AIDL,因为您的服务将在与您的 UI 完全不同的进程中运行,因此您将无法从您的服务进程访问 UI 进程中的内存。

于 2011-02-03T02:19:59.180 回答