android : 深入理解service和intentservice

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

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

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


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值