一、Service简介

Service通常位于后台运行,一般不需要和用户交互,因此Service组件没有图形用户界面。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。

二、 Service启动方式

1.调用startService启动

访问者与Service间没有关联,即使访问者退出了,Service也仍然在运行。不能调用Service内部的方法。

start() \rightarrow stop()

2.调用bindService启动

访问者与Service绑定在一起,访问者一旦退出,Service也就终止了。可以通过调用Service内部的方法。可以提供组件与Service交互的接口,进行跨进程通信(IPC)。

bind() \rightarrow unbind()

3.混合启动模式

该方式保证了Service可长期在后台运行,还可让调用者远程调用Service中提供的方式。

start() \rightarrow bind() \rightarrow unbind() \rightarrow stop()

三、Service生命周期

【精华】Android面试精华总结——Service组件
  

四、IntentService

  Service本身存在两个问题:

(1)不会专门启动一个单独的线程
(2)不应在Service中直接处理耗时任务

  IntentService使用队列来管理请求Intent,每当客户端代码通过Intent请求启动IntentService时,IntentService会将该Intent加入队列中,然后开启一条新worker线程处理该Intent。对于异步的startService请求,IntentService会按次序依次处理丢列中的Intent,该线程保证同一时刻只处理一个Intent。IntentService不会阻塞主线程,可以自己处理耗时任务。

  扩展IntentService只要重写onHandlerIntent()方法即可。

  IntentService具有如下特征:

  • IntentService会创建单独的worker线程来处理所有Intent请求;
  • IntentService会创建单独的worker线程处理onHandlerIntent()方法实现的代码,开发者无须处理多线程问题;
  • 当所有请求处理完后,IntentService会自动停止,故开发者无须调用stopself()方法停止Service;
  • 为Service的onBind()方法提供了默认实现,默认实现的onBind()方法返回null;
  • 为Service的onStartCommand()方法提供了默认实现,该实现会将请求Intent添加到队列中。

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

相关文章:

猜你喜欢
相关资源
相似解决方案