8.2 Service2

Service

注:1.Service不是一个单独的进程,它和它的应用程序在同一个进程中;

       2.Service不是一个线程,这样就意味着我们应该避免在Service中进行耗时操作;


IntentService

简介:自带工作线程的Service。继承于Service并处理异步请求的一个类,请求的Intent记录会加入队列。

流程:client通过startService来启动IntentService,可启动多次,添加入工作队列依次执行,在onHandleIntent回调方法处理。

场景:当一个后台的任务,需要分成几个子任务,然后按先后顺序执行子任务时使用。(自定义普通Service并控制线程比较繁琐)

使用:

配置service
TestIntentService
启动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 唤醒与屏幕唤醒;

暂略。

你可能感兴趣的:(8.2 Service2)