来总结一下 Service 的几个知识要点,包括启动方式、每种启动方式的生命周期、IntentService 源码分析,以及 boundService 三种使用方法。
注:API 大于等于 26 时,当 app 不在前台的时候,后台服务会受到限制,这种情况下,官方文档推荐使用 Schedule jobs。
startService(): onCreate() -> onStartCommand()/onStart() -> … -> onDestroy() bindService(): onCreate() -> onBind() -> … -> onUnbind() -> onDestroy() 以上两个生命周期只是对单个 activity start 或者 bind 服务的时候,然而在实际使用的时候,通常会两个结合使用,也或者是多个 activity 对同一个 service 绑定。
大家都知道,IntentService 的特性是运行在非 UI 线程,可执行耗时操作,当执行完后会自动销毁。我们今天在看一下它的原理: IntentService 内部由 HandlerThread 维护一个线程,在启动后获取 intent 并发送给 HandlerThread 所在的线程执行,执行完任务后自动调用 stopSelf() 销毁。 具体的源码实现如下:
作 者:ChanghuiN 原文链接:https://www.hchstudio.cn/article/2019/9f46/ 版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。