Service
Service生命周期
Service启动方式
- 第一种形式:通过startService()启动Service:
- 如果Service没被创建先执行onCreate(),再执行onStart()方法,Service开始运行。
- 如果Service已经存在,则只调用onStart()方法。
- 只有调用stopService()方法才能关闭Service。如果调用者退出但是没有调用stopService()方法,Service依然在后台运行。
- 第二种形式:通过bindService()方法启动Service:
- 调用bindServcie()后,如果Service没被创建会先执行onCreate,然后执行onBind()方法,并返回IBinder接口实例,允许其调用Service的方法。
- 使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,系统会调用onUnbind()和onDestroy()方法,服务就会终止。
- Service只能被绑定一次,如果另一个调用者希望绑定,可以先让前者unbindService()解除绑定。当然,在unbindService()执行之后,系统会调用Service的onUnbind()和onDestroy()方法终止服务。
Service与Activity通信
- 通过绑定之后的binder。
- 通过broadcastReceiver(广播接受者)。
- AIDL
IntentService
IntentService代码包含了一个工作线程Thread、工作线程的Looper、工作线程的Handler。
在onCreate()方法中创建了子线程HandlerThread,然后利用HandlerThread提供的Looper创建消息循环。
在onStart()方法中将Intent作为消息发送给Handler,最终交由onHandleIntent方法处理.
在destroy()方法会销毁消息循环,进而子线程终止.