Android之Service
Service 是 Android 四大组件之一,用来执行不需要前台或者耗时长的任务
Service 是什么
Service 是 Android 四大组件之一,它可以在后台执行长时间运行操作而没有用户界面的应用组件。
服务与其他应用程序对象一样,在其托管进程的主线程中运行。这意味着,如果你的服务要执行任何 CPU 密集型(例如 MP3 播放)或阻塞(例如网络)操作,它应该在 Service 中再创建一个子线程.
Service 的启动
startService()
- 启动 Service
显式启动通过类名称来启动,需要在 Intent 中指明 Service 所在的类,并调用 startService (lntent)启动 service
final Intent intentStart = new Intent(ServiceActivity.this, StartService.class);
startService(intentStart);
在上面的代码中,Intent 指明了启动的 Service 所在类为 StartService。
通过该方式启动 Service,访问者与 Service 之间没有关联,即使访问者退出了,Service 也仍然运行
- 停止 Service
stopService(intentStart);
bindService()
- 启动服务
bindService(Intent service,ServiceConnection conn,int flags);
其中的参数说明如下:
- service:该参数通过 Intent 指定需要启动的 service。
- conn:该参数是 ServiceConnnection 对象,当绑定成功后,系统将调用 serviceConnnection 的 onServiceConnected ()方法,当绑定意外断开后,系统将调用 ServiceConnnection 中的 onServiceDisconnected 方法。
- flags:该参数指定绑定时是否自动创建 Service。如果指定为 BIND_AUTO_CREATE,则自动创建,指定为 0,则不自动创建。
绑定方式中,当调用者通过 bindService()函数绑定 Service 时,onCreate()函数和 onBinde ( )函数将被先后调用。
通过该方式启动 Service,访问者与 Service 绑定在一起,访问者一旦退出了,Service 也就终止了。
- 使用 unbindService()方法取消绑定
取消绑定仅需要使用 unbindService()方法,并将 ServiceConnnection 传递给 unbindService()方法。
但需要注意的是,unbindService()方法成功后,系统并不会调用 onServiceConnected(),因为 onServiceConnected()仅在意外断开绑定时才被调用。
当调用者通过 unbindService()函数取消绑定 Service 时,onUnbind()函数将被调用。如果 onUnbind()函数返回 true,则表示重新绑定服务时,onRebind ()函数将被调用。
Service 的生命周期
onBind() 是 Service 必须实现的方法,返回的 IBinder 对象相当于 Service 组件的代理对象,Service 允许其他程序组件通过 IBinder 对象来访问 Service 内部数据,这样即可实现其他程序组件与 Service 之间的通信。
startService 启动的生命周期
onCreate() 当 Service 第一次被创建时,由系统调用。
onStartCommand() 当 startService 方法启动 Service 时,该方法被调用。
onDestroy() 当 Service 不再使用时,由系统调用。
一个 startService 只会创建一次,销毁一次,但可以开始多次,因此,onCreate()和 onDestroy()方法只会被调用一次,而 onStart()方法会被调用多次。
bindService 启动的生命周期
onCreate() 当 Service 被创建时,由系统调用。
onBind() 当 bindService 方法启动 Service 时,该方法被调用。
onUnbind() 当 unbindService 方法解除绑定时,该方法被调用。
onDestroy() 当 Service 不再使用时,由系统调用。
一个 bindService 可以创建多次,销毁多次,重复使用。