Service 适合执行那些不需要和用户交互,还要求长期运行的后台任务。
Service 默认是运行于当前进程的主线程,并不会主动创建线程。通常我们需要在 service 内部创建子线程来执行任务。
用法:
继承 Service
onCreate() 创建时调用
onStartCommand(Intent intent, int flags, int startId) 每次启动时调用
onDestroy() 销毁时调用
启动与停止服务:
context 环境 startService(intent) stopService(intent) bindService() unbindService()
service 内部 stopSelf()
与 Activity 的通信:
自定义类继承 Binder,并提供外部调用的方法,在 service 中创建实例并通过 onBind() 返回。
Activity 中,创建 ServiceConnection 实例 connection
bindService(intent, connection, BIND_AUTO_CREATE) 绑定服务,在连接完成时获取 binder 即可进行通信。
BIND_AUTO_CREATE 表示 activity 和 service 绑定后,自动创建服务,onCreate 会执行,onStartCommand 不会执行。
生命周期:
startService:onCreate -> onStartCommand -> onStartCommand -> onDestroy
bindService:onCreate -> onBind -> onDestroy
service 有可能两种方法都调用了,此时则需要同时调用 stop 和 unbind,service 才会销毁。