Service AIDL-什么';重点是什么?

Service AIDL-什么';重点是什么?,service,callback,aidl,android,Service,Callback,Aidl,Android,好的,我有一个android应用程序,它有一个活动(UI)和一个服务(后台轮询)。这两者使用AIDL(包括回调,所以它是双工通信、IPC等等)进行复杂的连接 只要他们俩说话,我就用这个 不过,我还扩展了应用程序类,以便两者可以共享公共数据对象。因此,应用程序持有服务始终使用的用户对象,活动也可以在运行时访问它 应用程序对活动的引用也很弱(以避免上下文泄漏),因为用户有时会触发UI更新 看来 Activity(UI)-->应用程序AIDL的要点是允许进程间通信。服务的要点是允许后台操作在与UI线程

好的,我有一个android应用程序,它有一个活动(UI)和一个服务(后台轮询)。这两者使用AIDL(包括回调,所以它是双工通信、IPC等等)进行复杂的连接

只要他们俩说话,我就用这个

不过,我还扩展了应用程序类,以便两者可以共享公共数据对象。因此,应用程序持有服务始终使用的用户对象,活动也可以在运行时访问它

应用程序对活动的引用也很弱(以避免上下文泄漏),因为用户有时会触发UI更新

看来


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

我明白了。我有点把同样的想法拼凑在一起,然后回来编辑我自己。如果我有一个单独的流程-高级任务杀手中不会出现一个独立的服务流程吗?这仅限于列出活动吗?去年我一直在Android 2.1到4.1.2的各种设备上使用多个应用程序中的后台服务,从未见过一个服务在同一个.apk文件中定义的用户界面的单独进程中运行。文档中说“如果某个应用程序组件启动,并且该应用程序已经存在一个进程(因为该应用程序中存在另一个组件),那么该组件将在该进程中启动,并使用相同的执行线程。”是的,您可以告诉它不要这样做,但我看不出你有什么理由…?你为什么要这样做的一个例子是后台音频服务。如果让播放器在单独的进程中运行,那么您的媒体播放器应用程序的内存效率会更高,因为在播放音频时,整个UI堆栈不必保留在内存中。然而,使用AIDL确实会使事情变得相当复杂,所以在大多数情况下,不值得这么做。
_app = (FooApplication)this.getApplication();
FooActivity uiRef = _app.getUIReference().get();
if (uiRef != null) {
   uiRef.updateSomeDisplay();
}