Service和IntentService的区别

Service和IntentService的区别

参考:

http://blog.qiji.tech/archives/2693

http://blog.csdn.net/guolin_blog/article/details/11952435

http://www.jianshu.com/p/332b6daf91f0

 

service:

api概念:

1.  Service不是一个单独的进程 ,它和应用程序在同一个进程中。


2.Service不是一个线程,所以我们应该避免在Service里面进行耗时的操作。如果有耗时操作在Service里,就必须开启一个单独的线程来处理!

相对于activity来说,Service主要负责需要长期运行的任务。只要进程还在,Service就可以继续运行。比如说一些应用程序,始终需要与服务器之间始终保持着心跳连接,就可以使用Service来实现。

Thread仅仅对创建它的Activity负责,而Service是所有的Activity都可以Service进行关联。

生命周期


onCreate->onStartCommand->onBind->onDestroy

 

Service分类

Service按照启动过程分类:

分为直接启动startService和绑定启动bindService。

当调用了startService()方法后,又去调用stopService()方法,这时服务中的onDestroy()方法就会执行,表示服务已经销毁了。

当调用了bindService()方法后,又去调用unbindService()方法,onDestroy()方法也会执行。同时,当activity销毁时与其绑定的service也会同时被销毁。

startService启动的服务优缺点:优点是一旦服务开始就会一直执行,直到被内存回收或者调用了stopService;缺点是activity无法与service进行数据交互;

bindService启动的服务优缺点:优点是activity可以和service进行交互;缺点是随着activity销毁,自己也会销毁;

为了能够满足又能与activity交互,又能在activity销毁后继续存活,我们这里可以这样启动:


如果要关闭服务我们既要unbindservice又要stopservice;

具体的内容参看:我的《安卓基础8:服务与Aidl》

 

 

Service按照进程类型:

分为local-service和remote-service;local运行的位置就是主进程。而remote-service运行的位置是一个新的进程。

local-service比较简单,不赘述了。

Remote-service因为是运行在另外一个新的进程里面,所以这里就涉及到跨进程通信。为了实现跨进程通信,我们采用Aidl来实现。

 

申明远程service:


创建aidl接口

 

在remote中返回实现接口并将其binder对象返回出去:


在activity中开启服务,并通过返回的binder对象进行接口调用:

 

IntentService:

概念:

IntentService 是继承自 Service 并处理异步请求的一个类,在IntentService 内有一个工作线程来处理耗时操作,当任务执行完后,IntentService 会自动停止,不需要我们去手动结束。如果启动 IntentService 多次,那么每一个耗时操作会以工作队列的方式在 IntentService 的 onHandleIntent 回调方法中执行,依次去执行,执行完自动结束。

使用:

通过intentService模拟下载图片服务;


源码:

注册服务:

activity使用服务


服务:


注意:

IntentServiceI与activity的交互都是通过广播完成的!

 

源码:

 

通过源码我们发现intentService中是通过HeaderThread来管理线程的,并且onBind返回的喂null。所以完全没办法和它进行直接交互。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值