android : 深入理解service和intentservice

service就是后台运行的东东,它比处于前台的应用优先级低,但是比后台的其他应用优先级高,这就决定了当系统因为缺少内存而销毁某些没被利用的资源时,它被销毁的概率很小哦。
以前做过音乐播放器,你把播放放在service而是放在java类是不对的,因为java处于后台的时候优先级低,容易被回收,因此播放会意外终止

说几点service特性
1. service分本地( 此时和acivity都在进程的主线程,因此耗时操作必须单独起线程,不然会ANR)和远程, 本地的就是和主应用在一个进程内,远程的在不同进程
2. startService()和bindService()分别什么时候用呢,其实从名字大概也能看出,前者是启动一个服务端,让他自己干活,直到调stopService才推出,后者是要绑定一个服务,既然是绑定,肯定希望得到一些东西,比如访问数据或者方法(绑定成功后回调通过onServiceConnected,就能拿到binder和service对象), 所有只有绑定的时候,以下方法才有意义
IBinder onBind(Intent intent)
boolean onUnbind(Intent intent)
void onRebind(Intent intent)


3. 可以绑定一个已经通过startService()方法启动的服务。例如:一个后台播放音乐服务可以通过startService(intend)对象来播放音乐。可能用户在播放过程中要执行一些操作比如获取歌曲的一些信息,此时activity可以通过调用bindServices()方法与Service建立连接。这种情况下,stopServices()方法实际上不会停止服务,直到最后一次unbind。



IntentService看这篇文章http://blog.csdn.net/ryantang03/article/details/8146154,总结几点 :
1. 内有一工作线程来处理耗时操作,这就代替了在service中启动thread处理耗时操作的行为
2. 执行完自己退出,无需手动干预
3. 可以启动IntentService多次,而 每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个,如果自己启动多个线程还要手动控制
4.适合于后台执行完就退出的场景,而不是常驻service,歌曲批量下载适合该场景

猜你喜欢

转载自touzilicai.iteye.com/blog/2089513