Android中系统服务和bind的应用服务有什么区别?
在Android中,系统服务(System Services)和应用服务(Application Services)在设计和用途上有本质区别,具体差异如下:
1. 启动方式
系统服务 | 应用服务 |
---|---|
由系统进程(SystemServer )在Android启动时初始化,例如ActivityManagerService 、WindowManagerService 等。- 通过 SystemServer 的main() 方法启动,运行在系统进程中。- 生命周期由系统管理,与应用进程无关。 | 由开发者通过Context 的startService() 或bindService() 方法显式启动。- 运行在应用进程的主线程中(除非指定其他线程)。 - 生命周期与绑定的组件(如Activity)或调用者相关,可能被系统回收。 |
2. 注册方式
系统服务 | 应用服务 |
---|---|
需要在系统级注册: - 系统服务需在 SystemServer 中通过ServiceManager.addService() 注册(如Java层的服务)。- 部分Native服务(如 SurfaceFlinger )通过Binder直接注册到ServiceManager 。 | 需要在应用的AndroidManifest.xml 中声明:xml<service android:name=".MyService" /> - 可配置 android:exported 决定是否允许外部应用绑定。 |
3. 使用方式
系统服务 | 应用服务 |
---|---|
通过Context.getSystemService() 获取实例:java<br>ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);<br> - 直接调用其API(如 am.getRunningTasks() )。- 系统服务提供的是单例对象,全局共享。 | 通过绑定(bindService() )获取IBinder 接口:- 客户端需实现 ServiceConnection 回调,在onServiceConnected() 中获取IBinder 。- 自定义通信协议(如AIDL或Messenger)。 - 需手动解绑( unbindService() ),否则可能导致内存泄漏。 |