Android从入门到放弃4-Service

前面说到了四大组件中的Activity,今天说一下Service。
四大组件都是由Android系统底层调用的,他们都是继承于各自的基类。
如你所写的MyActivity是继承于Activity,MyService继承于Service。

Google当初这么设计的原因在于,把系统核心的部分进行抽象,具体的部分由应用开发者来填补,这样能满足不同的业务场景下的系统构建。
从哲学来说是留空,空就是一切。

大家要知道你想调用某个类的方法,你首先得知道这个类名是什么,才能实例化它调用它的方法。
那么,有个疑问,这些Android的基础架构是提前写好的,MyActivity具体类是应用开发者后来才写的,系统怎么知道我写的这个类名叫MyActivity呢?
答案是通过 AndroidManifest.xml。
大家创建四大组件需要把自己实现类的类名写到这个xml上,然后编译时最终通过反射的机制来获取到类名。系统得到了类名之后,能够实例化这个对象,并调用它的方法。
并且一部分方法是通过IoC的机制来进行调用的,比如大量 onXXX() 的方法就是系统调用子类的具体实现。

好了前面说了四大组件如何与Android系统之间的关系。
下面回到正题,说一下Service是如何使用。

首先,我们需要实现一个Service具体类,比如MyService,它继承于Service。
Activity通过startService来启动Service,并创建ServiceConnection 来管理 Activity与Service之间的连接,这个有点类似于B/S结构的概念。MyService实现一个onBinder方法,这个方法是在Activity启动Service时由系统来回调,系统将Service创建的Binder对象引用传递到Activity,然后Activity就通过Binder来调用Service的方法。
比如让Service启动一个子线程做网络请求,处理好了之后,Service要通知Activity更新界面。

其中有一种方式是通过接口的形式来实现。Activity实现接口,Service通过调用接口方法回调到Activity,Activity再通过Handler来发送消息更新界面。

以上基本是Service最简单的使用说明。

有人会提问,既然主线程可通过启动子线程来执行后台任务,为什么还需要Service呢?
原因在于系统赋予了Service比主线程的Activity具有更高的优先级。那么当系统资源不足的时候,要做垃圾回收,那么Activity下的多线程很有可能被回收掉,那么线程没执行完的事情就会停止掉。而Service具有更高的优先级,以它来启动的线程不轻易被回收。

GitHub地址: https://github.com/wuzhuojun/firstcode/tree/master/fcode4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值