Service组件
1.概述:
(1)是什么?
2)安卓中的应用组件(生命周期方法)
3)安卓中的一个服务(长时间的工作在后台)
4)安卓中的一个Context(具备强大的资源访问能力)
(2)Service的应用场合:
Service在实际应用通常用于执行长时间的耗时操作;例如下载,音乐的播放,新闻信息的获取。。。。。
2.FAQ:
1)耗时操作不是应该在工作线程吗?是的service中执行长时间的耗时操作也是要启动工作线程的
2)Activity中启动工作线程和service中启动工作线程执行耗时操作有什么不同吗?
首先说明一点,service中要执行的耗时操作是长时间的耗时操作!
Activity中启动工作线程执行耗时操作,一般都是短时间的耗时,例如一次数据加载。
3)为什么不推荐在activity中启动工作线程执行长时间的耗时操作呢?
在实际应用中在activity执行长时间的耗时操作是不推荐的,这由安卓系统的进程管理机制决定。在安卓系统中假如内存不足时,会有选择性的kill掉一些优先级比较低的进程;
4)安卓中进程分类:
a)前台进程:(允许或正在与用户直接交互的进程)
b)可见进程:(可见,但不可以操作)
c)服务进程:(不可见但有services正在运行)(优先级相对高些;)
d)后台进程:(没有services组件在运行,可能有其他组件,但不可见)
e)空进程:(没有任何组件的进程)
从上到小,进程优先级逐渐降低;
以上进程的优先级是由高到低的,我们选择在Services中启动工作线程执行长时间的耗时操作,目的是提高此工作线程所在进程的优先级,从而提高这个进程的生命力。不容易在内存不足时,被杀死。
5)所有的耗时操作都在services中启动工作线程执行吗?
不是,长时间的耗时操作推荐在services中启动工作线程。
3.安卓中Services的类型及使用:
(1)启动模式Service
(2)绑定模式Service
(3)混合模式Service
4.安卓中启动模式service的应用:
1)构建Service(重写相关启动模式对象的生命周期方法)
2)注册Service(AndroidMaifest.xml)
3)应用Service(重点理解生命周期方法)
底层设计是一种单例,不完整的单例;(构造方法是public修饰的)
所有组件的构造方法都不能私有化;
我们在启动service时,加入service对象不存在,底层会通过反射构建service对象,然后调用service对象的无参数的构造函数;
记住:我们自己不能构建service;底层框架构建;
记住:构造方法的修饰符必须是public ,必须是无参的;
记住:所有生命周期方法都是由底层框架回调(底层框架services调用生命周期方法)
FAQ:
如何通过隐式意图启动service;
如何通过隐式意图停止service;
如何实现通知与service对象的绑定
如何取消通知与service对象的绑定
案例:简单的音乐播放;
5.安卓中IntentService
(1)“在启动模式中的应用,IntentService本身也是一个service,它应用于启动模式,它内置一个工作线程,此线程对象可以用于执行耗时操作,耗时操作执行结束后会自动停止service;
我们在使用IntentService要构建一个IntentServive对象的子类对象,并重写相关方法,onHandlerIntent;此方法会运行在工作线程,可以执行耗时操作;
(2)IntentService为什么会运行在工作线程?
6.安卓中绑定模式的Service;
FAQ:
在activity中,我们可以直接new service对象吗?
在activity中,我们需要service对象如何获得?
如何理解绑定模式service?
此时我们可以调用service中的相关方法;
绑定(bind)模式service相当于在activity与service之间建立一个长连接,serviceconnection对象,我们可以在activity中通过这个长连接对象,访问到绑定的那个service对象;
绑定模式service的应用:
1)创建service:直接或间接的继承Service
onCreate():service创建的时候执行
onBind():执行绑定操作时执行
onUnBind():执行解除绑定时操作
onDestory():service销毁时
2)注册service:AndroidManifest.xml
3)绑定service:context.bindServi ce(...);
4)解除service绑定:context.unBindService(...);