service的理解

1.Service的start和bind状态有什么区别?
1.service的startSerive(前提serive属于四大组件必须在清单文件注册)启动了onCreate(),onStartCommand(),但无论start多少次,onCreate只会初始化一次,后面startSerive只会重复调用onStartCommand。 bindService(intent, serviceConnection, Service.BIND_AUTO_CREATE);要实例化一个serviceConnection,bindService后的onCreate和bind只会实例化一次。

2、同一个Service,先startService,然后再bindService,如何把它停止掉?
2.假如一个service先startServicebindSerivice,1)直接先stopService,因为service还别的有客户端bind,所以还有个“已绑定”状态,所以不会被销毁,所以不会执行onDestroy方法;然后再unbind,此时已经没有任何状态了,所以会被销毁,会调用onUnbind和onDestroy方法。2)先unbind:因为service是别的客户端通过start启动的,所以还有个“已启动”状态,所以不会被销毁,所以只执行onUnbind方法;再stop,此时已经没有任何状态了,所以会被销毁,调用onDestroy方法。所以正确的做法是应该最后必须解绑service(unbindservice)和停止服务(stopservice)。

3、你有注意到Service的onStartCommand方法的返回值吗?不同返回值有什么区别?
3.onstartCommand有四个返回值START_STICKY_COMPATIBILITY, START_STICKY, START_NOT_STICKY or START_REDELIVER_INTENT。

START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。
START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。
START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。

4、Service的生命周期方法onCreate、onStart、onBind等运行在哪个线程?
4.service通过打log 。Looper.myLooper() == Looper.getMainLooper()判断。知道oncreate,onstartcommand,onbind都在主线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值