1.Service的start和bind状态有什么区别?
提到生命周期,就得想到Service 有两种启动方式,分别如下:
(1)直接startService,然后使用stopService关闭。此时生命周期
startService-->onCreate()-->onStartCommand()-->stopService-->onDestort-->结束
(2)绑定开启bindService,使用unbindService解绑关闭。此时生命周期
BindService-->onCreate()-->onBind()-->UnBindService()-->onUnBind()-->onDestory()-->结束
然而二者区别:
(1)startService 和 stopService 只能开启和关闭,无法操作Service. bind 和unBind 是可以操作Service
(2)start开启的Service.调用者退出后Servicer依然存在,bind开启的Service.调用者退出后,随着调用者销毁
2.同一个Service,先startService,然后再bindService,如何把它停止掉?
先调用unBindService 在调用stopService
3.你有注意到Service的onStartCommand方法的返回值?不同返回值有什么区别?
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等运行在哪个线程?
运行在主线程
网友评论