Android Service 详解(上)

Android Service 详解(上)

Service 做为 Android 的四大组件仍是颇有必要好好掌握一下的!微信

Service 生命周期

先从 Service 生命周期看起,Service 的生命周期比较有趣的一点是,它的生命周期会根据调用不一样的方法启动有不一样的表现,具体有两种形式。code

  1. 经过 startService(Intent intent) 启动 Servicecdn

    生命周期是这样的: onCreate()onStartCommand()onStart()(已通过时)onDestroy()生命周期

  2. 经过 bindService(Intent intent,ServiceConnection conn,int flags) 启动 Serviceget

    生命周期是这样的:bindService()onCreate()IBinder onBind(Intent intent)unBindService()onDestroy() 方法。it

经过 startService 启动

前面说了,经过 startService() 启动 Service 会执行 onCreate()onStartCommand()onDestroy() 方法。注意:当调用 startService(Intent intent) 后,以后只执行一次 onCreate() 方法,反复屡次调用 startService 后,Service 只会重复执行 onStartCommand onStart()(已通过时) 方法。调用 stopService 后 Service 只执行一次 onDestroy 方法。io

能够看到经过这种方式启动 Service ,这个时候的 Service 几乎和 Activity 不能交互(不考虑全局变量的方式),在 Service 里面也没有 getIntent() 方法。class

经过 bindService 启动

既然经过 startService 启动的 Service 和 Activity 没有创建联系,那么经过 bindService 来启动 Service,就能够和 Activity 创建联系了,至关于 Service 绑定到了这个 Activity 中了。变量

经过 bindService(Intent intent ,ServiceConnection connetion,int flag) 启动 Service 后 Service 的正常的生命周期是:onCreate、onBind、ibinder 会做为参数传递到 connect 中的 onServiceConnected 方法中,绑定后,再次执行 bindService Service 什么都不执行。service

Activity 在没有 bindService 的状况下,调用 unBindService(ServiceConnection serviceConnection) 是会 crash 的。不管在什么状况下,对于某个 Activity,只可以执行一次 unBindService。由于执行完一次 Service就再也不注册 serviceConnection 了,再次 unBinderService 就会出现错误 Service not registered:MainActivity$ServiceConnection$ 只有在单独执行 bindService (执行 bindService 先后没有执行 startService)的状况下,执行 unBindService 才会正常执行 Service 的 onDestroy 方法。

宿主 Activity 退出,不会正常执行 Service 的 onDestroy 方法。

关于 binSerive(Intent intent,ServiceConnection connection,int flag) 中的参数

  • 第一个参数就是要绑定的 Service 的intent 就很少说了
  • 第二个参数就是 Service 和 Activity 创建联系使用的
  • 标志位,和启动的 Service 的优先级有关,通常就是传入:BIND_AOUT_CREATE 表示在 Activity 和 Service创建关联后自动建立 Service。

其实上面的标志位目前做用不大,这个阶段大可没必要细究。可是为了知足心理须要,我仍是大致解释一下可使用的参数。(放到下一篇吧)

关于 Service 启动总结

上面介绍的都是在单独执行 startService 或者 binService 的状况下。

当既执行了 startService 又执行了 binService 的时候(不区分顺序),只有执行过 stopService 和unBindService 的时候(不区分顺序)才执行 onDestroy 方法。

任何一个 Service 在整个应用程序范围内都是通用的。即 MyService 不只能够和 MainActivity 创建关联,还能够和任何一个 Activity 创建关联。若是 Service 和多个 Activity 绑定,则只有这个 Service 与 全部 Activity 接触绑定后,才会执行 onDestroy 方法。(若是 Activity 被销毁了,也认为 Service 和这个 Activity 解除了绑定)若是在某个 Activity 调用 startService 后,Service 就被启动了,这个时候,不管你在哪一个 Activity 内再调用 startService 效果就和上面分析的屡次调用 Service 效果是同样的。

以上是简单概念,还有下篇。

欢迎你们关注个人微信公众号,和我交流分享
相关文章
相关标签/搜索