其他分享
首页 > 其他分享> > service生命周期及各种回调实测

service生命周期及各种回调实测

作者:互联网

1. 也就是说,他有两种启动方式
startService:onCreate()- >onStartCommand()->startService()->onDestroy()
BindService:onCreate()->onBind()->onUnbind()->onDestroy()

startService的启动方式:
这种启动方式和启动activity很相像:
Intent intent = new Intent(this, MyService.class);
startService(intent);
在使用这种方式启动服务之后,此服务就会一直在后台运行,不受启动它的activity的生命周期的影响,除非我们在 service 的任何一个位置调用它的 stopService()方法;或者程序被杀死/结束,此service才会被停止

BindService的启动方式:
Intent bindIntent = new Intent(this, MyService.class);//Myservice是子定义的service,继承了service类
bindService(bindIntent, connection, BIND_AUTO_CREATE);//第一个参数就是intent,第二个参数是ServiceConnection,第三个参数是一个标志位,这里传入 BIND_AUTO_CREATE 表示在活动和服务进行绑定后自动创建服务。
它区别于startService的启动,他的生命周期是和启动它的acitvity(活动)是紧密相关的,也就是说,如果你在A活动里用bindService的方式启动了一个Serivce,那么如果这个activity被销毁,则此service也就会被终止。那如果我们想自己解除活动和服务之间的绑定该怎么办呢?调用一下 unbindService()方法就会调用onUnbind()和onDestroy()了。

3. 当一个Service被创建以后,再次调用startService方法,Service是不会被重新创建的,而是会重新执行onStartCommand方法。

BindService一旦被某个activity调用,onbind、 onServiceConnected和doTask就会被调用,且在被此activity绑定的状态下此activity再次调用BindService不会产生变化。(当所有绑定此service的activity都解绑了,调用onDestroy()才会成功,否则会报错)

onStartCommand属于Service类,doTask属于Service的内部Binder类,onServiceConnected属于activity的内部ServiceConnection类

由此可见onStartCommand是Service自己的服务内容,doTask是属于和activity有联系的Service服务内容,ServiceConnection是activity在绑定成功时自己的动作内容。

标签:生命周期,Service,service,启动,调用,实测,activity,startService
来源: https://www.cnblogs.com/1118zjg/p/16009914.html