在远程进程中运行Android服务是否意味着它在不同的线程上运行?这是本地和远程服务之间的区别吗?
同样,当通过IPC调用远程服务时,它会立即返回吗?还是等待行动完成?
答案 0 :(得分:8)
在远程进程中运行Android服务是否意味着它在不同的线程上运行?
由于线程由其进程拥有,因此在单独的进程中使用服务意味着它将使用除任何其他进程使用的线程之外的线程。
这是本地和远程服务之间的区别吗?
通常,“远程服务”是由单独的应用程序提供的服务。
同样,当通过IPC调用远程服务时,它会立即返回吗?还是等待行动完成?
调用是同步的 - 它们必须是,因为AIDL方法可以返回结果。当客户端通过AIDL定义的方法调用服务时,客户端会阻塞,直到服务返回,无论任何一方正在使用什么进程或线程。
答案 1 :(得分:1)
Android服务,默认情况下,与活动等在同一个线程中运行:
“请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行。” ref
本地服务是在编译时由同一应用程序中的其他组件使用的服务:它们可以像调用任何其他对象一样调用服务的方法。
远程服务是通过AIDL调用的服务,不需要编译时关系。
答案 2 :(得分:0)
同样,当通过IPC调用远程服务时,它会立即返回吗? 还是等待行动完成?
调用是同步的,如CommonsWare所述,但远程服务的一个常见模式是使用回调,允许远程服务异步通知客户端。
您可以在Android文档中看到这样做的示例:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html