Android_service

service可以开辟线程,访问网络,操作数据库,主要用于在后台处理耗时操作,比如说下载,是service在后台处理下载的操作。service不受Activity生命周期的影响。

service的生命周期

  • onCreate() ——创建
  • onStartCommand()
  • onBind() ——用于绑定的方法
  • onUnbind() ——解绑
  • onDestroy() ——摧毁

创建service的时候,编译器会自动将service注册到AndroidManifest.xml中。

启动式服务

生命周期只有三个:

  • onCreate()
  • onStartCommand()
  • onDestroy()
Intent it=new Intent(this,MyService.class);
startService(it);

服务创建之后,永远是同一个对象,多个intent跳转的也是同一个服务对象。启动服务过程:创建->启动->销毁;

如果服务已经创建了,那么后续重复启动,操作的都是同一个服务,不会再重新创建。除非你先销毁它。

绑定服务

单单是绑定服务无法让服务运行起来。
绑定服务方法(先创建,再绑定):
如果服务不存在:
onCreate()->onBind()->onUnBind()->onDestory()

如果服务已经存在,那么bindService方法只能使onBilnd方法被调用,而unbindService方法只能使onUnbind被调用
bindService(),需要传入三个参数,依次是Intent,ServiceConnection(Android中ServiceConnection是一个接口,主要在绑定服务中用于客户端和服务器端链接的;使用ServiceConnection时通常要重写onServiceConnected()和OnServiceDisconnected()方法)和绑定时自动创建服务的标记位。
如果要解绑,ServiceConnection对象需要定义为全局对象。
解绑方法(先解绑,再销毁):
unbindService(),需要传入ServiceConnection对象。

在Android中绑定式服务bindService会随着Activity的结束而结束,但是启动式服务startService不受Activity的影响。

如果要用service来进行一个耗时的操作,我们应该应该在启动服务中进行,因为绑定操作会随着activity的生命周期的结束而结束。
但是绑定服务最大的作用是用来实现Service执行的任务进行进度监控。

IBinder

在onBind(intent)方法中,需要返回一个IBinder接口,binder类实现了IBindler接口的所有实现方法,实际上,我们会自己定义一个内部类,继承Binder类。

ServiceConnection

Android中ServiceConnection是一个接口,主要在绑定服务中用于客户端和服务器端链接的。
ServiceConnection中的方法:

  • onServiceConnected() ——当客户端正常连接服务的时候,执行服务的绑定操作会被调用,用来获取进度。
  • OnServiceDisconnected() ——当客户端和服务的连接丢失了的操作

猜你喜欢

转载自blog.csdn.net/xqy3177563/article/details/89213264