好的,所以我有一个带有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调用,看看它是否存在,并调用它的方法。
答案 0 :(得分:0)
AIDL的重点是允许进程间通信。服务的重点是允许后台操作在与UI线程分开的进程中运行,这样即使您关闭应用程序也可以继续运行。您需要AIDL,因为您的服务将在与UI完全不同的过程中运行,因此您无法通过服务流程访问UI流程中的内存。