Service
注:1.Service不是一个单独的进程,它和它的应用程序在同一个进程中;
2.Service不是一个线程,这样就意味着我们应该避免在Service中进行耗时操作;
IntentService
简介:自带工作线程的Service。继承于Service并处理异步请求的一个类,请求的Intent记录会加入队列。
流程:client通过startService来启动IntentService,可启动多次,添加入工作队列依次执行,在onHandleIntent回调方法处理。
场景:当一个后台的任务,需要分成几个子任务,然后按先后顺序执行子任务时使用。(自定义普通Service并控制线程比较繁琐)
使用:



结果:

Activity与Service通信
原理:媒介就是Service中的onBind()方法(详细参考8.2 Service 中 bindService的例子)
1.自定义Service中,自定义一个Binder类,然后将需要暴露的方法都写到该类中;
2.Service类中,实例化这个自定义Binder类,然后重写onBind()方法,将这个Binder对象返回;
3.Activity类中实例化一个ServiceConnection对象,重写onServiceConnected()方法,然后 获取Binder对象,调用相关方法即可;
简单前台服务实现
即:状态栏显示Notification;
注:由于service系统优先级比较低,使用前台服务可以让service没那么容易被杀死,但还是可能被杀死的;

简单定时后台线程的实现
Timer类:不适合长期后台运行定时任务,CPU一旦休眠Timer中的定时任务就无法运行;
Alarm机制:具有唤醒CPU的功能,需注意区分CPU 唤醒与屏幕唤醒;
暂略。
网友评论