Android四大应用组件之Service初探

理解Service

定义

Service用来在后台完成一个时间跨度比较大的工作且没有关联任何界面。即使应用退出, 服务也不会停止。默认情况下在UI线程中运行,但是在执行耗时操作时,需要在分线程中执型,避免阻塞用户界面。

与Thread的区别

两者都是应用退出时不会停止(不是退出进程),区别是再次进入应用时可以与Service进行通信,但是不能在控制之前的Thread对象。

两种启动与停止方式

  1. 一般启动:
    context.startService(Intent intent);
    context.stopService(Intent intent);
  2. 绑定启动:
    context.bindService(Intent intent, ServiceConnection connection);
    context.unbindService(ServiceConnection connection);
  3. 区别:
    一般启动后除非停止,或者杀死进程,不然服务不会停止
    绑定启动后,调用者死亡后,服务也就死了。

生命周期

Android四大应用组件之Service初探

AIDL

每个应用程序都运行在自己的独立进程中,并且可以启动另一个应用进程的服务,而且经常需要在不同的进程间传递数据对象。在Android平台,一个进程不能直接访问另一个进程的内存空间,所以要想对话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界。

AIDL (Android Interface Definition Language) 用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数。

补充:

  1. 每个Service必须在manifest中 通过来声明
  2. 绑定服务不会调用 onStart() 或 onStartCommand() 方法。