intentservice继承与service,用来处理异步请求。客户端可以通过startservice(intent)方法传递请求给intentservice。intentservice在oncreate()函数中通过handlerthread单独开启一个线程来依次处理所有intent请求对象所对应的任务。
这样以免事务处理阻塞主线程(ANR)。执行完所一个intent请求对象所对应的工作之后,如果没有新的intent请求达到,则**自动停止**service;否则执行下一个intent请求所对应的任务。
intentservice在处理事务时,还是采用的handler方式,创建一个名叫servicehandler的内部handler,并把它直接绑定到handlerthread所对应的子线程。 servicehandler把处理一个intent所对应的事务都封装到叫做onhandleintent的虚函数;因此我们直接实现虚函数onhandleintent,再在里面根据intent的不同进行不同的事务处理就可以了。
另外,intentservice默认实现了onbind()方法,返回值为null。
使用intentservice需要实现的两个方法:
构造函数
intentservice的构造函数一定是参数为空的构造函数,然后再在其中调用super(“name”)这种形式的构造函数。因为service的实例化是系统来完成的,而且系统是用参数为空的构造函数来实例化service的
实现虚函数onhandleintent
在里面根据intent的不同进行不同的事务处理。
好处:处理异步请求的时候可以减少写代码的工作量,比较轻松地实现项目的需求。
service不是独立的进程,也不是独立的线程,它是依赖于应用程序的主线程的,不建议在service中编写耗时的逻辑和操作,否则会引起anr。
intentservice 它创建了一个独立的工作线程来处理所有的通过onstartcommand()传递给服务的intents(把intent插入到工作队列中)。通过工作队列把intent逐个发送给onhandleintent()。
不需要主动调用stopselft()来结束服务。因为,在所有的intent被处理完后,系统会自动关闭服务。
默认实现的onbind()返回null。
然后记得在manifest.xml中注册服务
最后在activity中开启服务
运行结果:

intentservice在oncreate()函数中通过handlerthread单独开启一个线程来依次处理所有intent请求对象所对应的任务。
通过onstartcommand()传递给服务intent被依次插入到工作队列中。工作队列又把intent逐个发送给onhandleintent()。
注意: 它只有一个工作线程,名字就是构造函数的那个字符串,也就是“myintentservice”,我们知道多次开启service,只会调用一次oncreate方法(创建一个工作线程),多次onstartcommand方法(用于传入intent通过工作队列再发给onhandleintent函数做处理)。
版权声明:请尊重个人劳动成果,转载注明出处,谢谢!
http://blog.csdn.net/amazing7/article/details/51394846