AIDL - 重点是什么?

时间:2011-02-03 01:51:24

标签: service callback aidl android

好的,所以我有一个带有Activity(UI)和Service(后台轮询)的Android应用程序。两者使用AIDL进行错综复杂的连接(包括回调,因此它是双工通信,IPC,无论如何)。

两次谈话时,我都在使用它。

但是我还扩展了Application类 - 这样两者就可以共享公共数据对象。因此,Application保存了Service一直使用的User对象,Activity也可以在它运行时访问它。

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

所以它看起来像

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

我可以通过

触发服务中的UI事件
_app = (FooApplication)this.getApplication();
FooActivity uiRef = _app.getUIReference().get();
if (uiRef != null) {
   uiRef.updateSomeDisplay();
}

所以我没理解。当我只是弱引用UI时,为什么还要复杂的AIDL调用,看看它是否存在,并调用它的方法。

1 个答案:

答案 0 :(得分:0)

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