生命周期

要点
- 服务在其托管进程的主线程中运行,它既不创建自己的线程,也不在单独的进程中运行(除非另行指定)。 
- 两种调用方式:startService() 和 bindService()。 
- startService() 与 bindService() 有可能都被调用,那样除非所有客户端均取消绑定(组件销毁或 unbindService()),且调用过 stopService() 或 stopSelf() 后才会实际停止服务。 
- 多次服务启动请求会导致多次对服务的 onStartCommand() 进行相应的调用。但是,要停止服务,只需一个服务停止请求(使用 stopSelf() 和 stopService())即可。 
如何让 Service 不被杀死
- 将服务绑定到具有用户焦点的 Activity; 
- 将服务声明为在前台运行; 
- onStartCommand() 返回 START_STICKY 或 START_REDELIVER_INTENT; 
- 注册一些系统广播事件拉活服务; 
- Native 守护进程或 Service 守护,轮询状态,检测到进程结束就启动; 
- 两个分别运行在独立进程里的 Service,相互绑定,在一个服务被杀死后,另一个会被调用到 onServiceDisconnected,在里面调用 startService 和 bindService 启动对方。 
参考
- [Services - Android Developers](https://developer.android.com/guide/components/services.html) 
文档信息
- 本文作者:Yingqi Chen
- 本文链接:https://cyq1005658400.github.io/blog//wiki/android-components-service/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)