Android四大应用组件之Service初探
理解Service
定义
Service用来在后台完成一个时间跨度比较大的工作且没有关联任何界面。即使应用退出, 服务也不会停止。默认情况下在UI线程中运行,但是在执行耗时操作时,需要在分线程中执型,避免阻塞用户界面。
与Thread的区别
两者都是应用退出时不会停止(不是退出进程),区别是再次进入应用时可以与Service进行通信,但是不能在控制之前的Thread对象。
两种启动与停止方式
- 一般启动:
context.startService(Intent intent);
context.stopService(Intent intent); - 绑定启动:
context.bindService(Intent intent, ServiceConnection connection);
context.unbindService(ServiceConnection connection); - 区别:
一般启动后除非停止,或者杀死进程,不然服务不会停止
绑定启动后,调用者死亡后,服务也就死了。
生命周期
AIDL
每个应用程序都运行在自己的独立进程中,并且可以启动另一个应用进程的服务,而且经常需要在不同的进程间传递数据对象。在Android平台,一个进程不能直接访问另一个进程的内存空间,所以要想对话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界。
AIDL (Android Interface Definition Language) 用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数。
补充:
- 每个Service必须在manifest中 通过来声明
- 绑定服务不会调用 onStart() 或 onStartCommand() 方法。