最近看了任医生的《Android艺术开发探索》感觉收获颇丰。所以也想记录一下博客,因为写博客觉的确实是积累和总结的过程。好了,废话不多说了。
service总共分为2种,一种是普通service,就是直接继承Service的类,比较简单。主要注意的是这个类运行在主线程的,不能做耗时的工作。如果需要做耗时的工作就需要另外开启i一个线程了。
根据官方文档对service的基础方法的解释:
onStartCommand():当其他的组件调用startService()方法的时候,这个方法会调用一次,并在后台运行。如果你实现了找个方法,你有必要在这个方法完成之后调用stopSelf或者stopService(如果你仅仅想获取binding可以不必实现这个方法)。这个也是基础service进行工作的方法,把你要实现的功能写在这里。有一点要注意,当你是通过bindService开启服务的时候,这个方法是不会被调用的
onStartCommand回调方法还有一个返回值,返回值系统总共给了3个:
1、START_NOT_STICKY 这个值文档上说是系统不会轻易在你工作未完成前杀死这个服务。是一个相对安全的值。系统不会重新创建这个服务
2、START_STICKY 当我们返回这个值的时候,会重新创建这个服务,不过不会再传递intent对象了。这个比较适合多媒体播放
onBind():当其他组件想要与这个service绑定的话(例如实现远程协议调用RPC),在这个方法实现里你必须提供IBinder接口来和客户端通信。 要实现跨进程通信必须要实现的方法
onCreate():当这个服务第一次创建的时候系统回调,可以在这里做一些初始化工作
onDestroy():当服务被销毁的时候,系统回调,做一些释放内存的操作
还有一种也可以实现Service的功能,就是IntentService,这个和上面的不同之处在于,这个我们要在onHandleIntent.方法里进行操作。而且这个回调是可以进行耗时操作的。
下面说说启动服务,启动服务主要两种方式,第一种是startService,当我们启动一个实现了onStartCommand服务之后,onCreate之后调用一次,并且再次启动不会调用该方法。