Service 与 Thread 的区别与应用场景理解

刚开始学的时候,总是弄不清Service和Thread之间的区别。

后来我仔细研究了一下安卓的设计架构,有了一点想法,对他们的应用场景也有了一些认识。


首先,明确一个基本法,一个Service其实是运行在主线程里的(可以理解成Service与Activity平级)。如果你在一个Service里写了大量的逻辑,同样会阻塞这个主线程,然后抛出ANR错误(Activity无响应)。所以如果要处理一些大逻辑或慢逻辑,比如网络连接,就需要在这个Service里再开一个子线程,然后进行Socket连接。

你可能会说:“这不是坑爹呢么?那我为什么不在Activity里直接开一个Thread呢?要这个Service何用?”  (╯‵□′)╯︵┻━┻


其实不然,我们举一个例子,一个Service的标准用法来说明:Service在后台维护着一个TCP Socket链接,或者说,这个应用的网络连接。

整个安卓应用的框架应该是这样的

一个Application(应用)下存在着多个Activity,如果我只在第一个Activity里靠子线程维持着一个Socket,那么当我切换到第二个Activity时,这个Socket就因为第一个Activity被销毁而断开了。但现在我们在第一个Activity(比如说启动欢迎界面)里激活一个Service,然后在Service里创建子线程去维持一个Socket。

我们知道Service的生命周期与Activity在默认状态下是不绑定的。第一个Activity死掉了这个Socket也并不会断开,相反在第二个Activity中,只需要绑定这个Service就可以继续使用同一个Socket从服务器获取信息。


总结一句话,Service是一个Application间,提供跨Activity服务的载体,而Thread则是不同Activity或Service里具体逻辑的实现者。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值