刚开始学的时候,总是弄不清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里具体逻辑的实现者。