android服务类 Service

原创
2015/12/28 13:46
阅读数 262

                当只使用startService()来启动服务

startService可以多次调用,stopService()也可以多次调用。

总结:::startService第一次调用的时候,Service的生命周期方法

       onCreate()---->onStartCommand()会执行。再次并多次调用startService会使Service的        生命周期方法onStartCommand()多次执行,onCreate()方法不执行了。

总结:::调用stopService()是如果Service已经启动,Service的生命周 期方法 onDestroy()会                                  执行。再次并多次调用没有任何反应不回调生命周期方法了。可以多次调用(不崩溃)

 

  

Service 中的onStartCommand()必须返回一个整数.这个整数描述了在系统杀死它的事件中系统如何继续这个服务onStartCommand()也返回值必须是下面常量之一:

  • START_NOT_STICKY

      如果系统在onStartCommand()返回后杀死了服务,不要重新创建这个service,除非还有挂起的intent需要被传送.这是避免在不必要时运行你的service和当你的应用可以简单重启任何未竟的工作时的最佳选择.

  • START_STICKY    如果强制退出了  那么他会使用一个null 的intent  请注意

      如果系统在onStartCommand()返回后杀死了这个service,会重新创建这个service并且调用onStartCommand(),但是不再重新发送上次最后一个intent,而是使用一个nullintent调用onStartCommand(),除非有一些挂起的intent,在此情况下,这些挂起的intent被派送.这适合于媒体播放器(or或相似也的服务),它不执行命令,但是无限期的运行并等待一个工作.

  • START_REDELIVER_INTENT

      如果系统在onStartCommand()返回后杀死了service,重新创建这个service并且使用上次最后一个intent调用onStartCommand().任何挂起的intent都顺序地被派送.这适合于活跃地执行一个工作并且应被立即恢复的服务,比如下载一个文件

 

                当只使用bindservice()来启动服务

 

bindservice()方法可以多次调用,unbindService()方法不可以多次调用(应用会崩溃)。

总结:::bindService()并且《bindService()方法第三个参数

      是Context.BIND_AUTO_CREATE》 的时候,第一次调用bindService()方法       Service生命周期方法

      onCreate()-->onBind()执行,再次并多次调用生命周期方法不回调。

 

 

总结:::bindService()并且《bindService()方法第三个参数

      不是Context.BIND_AUTO_CREATE》的时候,第一次(再次多次)调用bindService()方       法Servic生命周期方法都不会回调。(因为这个时候服务没有启动)


 

总结:::unbindService()方法如果调用了,Service必须注册了(即调用过bindService方        法),service生命周期的onUnbind()-->onDestroy()。如果没有注册过那么调用     unbindService()会崩溃。所以不能再次并多次调用unbindService()。

 

 

 

 

 

 

 

 

 

       同时使用了 startService()bindService()并且《bindService()方法第三个参数                                                是Context.BIND_AUTO_CREATE》。

情况1:::如果我们只调用stopService(),不会回调任何生命周期方法。只有我们再次调                                                 用unbindService()才会执行ervice的生命周期的ubind()和onDestroy()方法。

情况2:::如果先调用unbindService()方法会先执行Service的生命周期的ubind(),然后再调                                               用stopService()方法就会执行Service的生命周期的onDestroy()方法。

总结:::在Context.BIND_AUTO_CREATE模式下同时使用了 startService()和bindService(),想要                                   完全退出Service必须调用stopService()和unbindService()两个方法。

 

          

          

      同时使用了 startService()bindService()并且《bindService()方法第三个参数

                            不是Context.BIND_AUTO_CREATE》。

情况1:::如果我们只调用stopService(),那就会执行Service的生命周期的unbind()和onDestroy()                                 方法(可以不必调用unbindService())。

情况2:::如果先调用unbindService()方法会先执行Service的生命周期的ubind(),如果再调                                               用stopService()方法就会执行Service的生命周期的onDestroy()方法。

总结:::不在Context.BIND_AUTO_CREATE模式下,同时使用了 startService()和bindService()                                        可以只调用stopService()方法来完全退出Service。


 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部