Android学习笔记

Android Note - Service

2016-04-07  本文已影响90人  肉丝汤

Service是由framework层的ActivityServiceManager管理的生命周期长、运行于后台的服务性组件。Service本身是运行在当前应用进程的主线程中,但是可以在Service中开辟子线程以实现音乐播放、数据库交互、文件操作等耗时操作(因为绝大多数情况下Service没有前台界面)。需要在manifest文件中声明Service

manifest中的部分参数配置说明

  • android:exported 是否允许被包名不同的应用调用。设为false时表示只能被当前应用或同一用户ID的应用启动或绑定
  • adnroid:name 服务相对于整个应用包的路径,可以填写完整路径,也可以只写Service的相对路径

启动方式


Service有两种启动方式,分别通过startService方法和bindService方法启动

生命周期


服务的生命周期

服务的生命周期根据启动方式的不同而略有差异。如同Activity生命周期一样,在生命周期每个阶段,分别会发出不同的回调方法;与Activity不同之处是Service的回调方法中不需要实现基类的方法(super)

onStartService onBindService **先通过onStartService()启动,再通过onBindService()绑定**

附加参数


onStartCommand() 提供一个返回值,告诉系统在onStartCommand()方法调用结束后Service被kill时如何重启Service。返回值有如下几种

Foreground Service


使用Foreground Service,使Service在内存回收中获得更高优先级,比后台Service更不容易被系统kill
通过在Service的onStartCommand()回调方法中调用startForeground()方法,可以让Service在前台运行
通过调用stopForeground()方法,可以让Service停止前台运行,但是Service本身不会被停止

Remote Service


当Service需要被其他应用调用时,该Service相对于其他应用而言是一个Remote Service(远程服务)。此时服务与应用分别处于不同的进程中,需要跨进程通信(IPC)。Android中采用AIDL(Android Interface Defination Language)协议进行跨进程通信

参考资料


Android中Service类onStartCommand
Android Service的生命周期
Android中Service的使用详解和注意点
Android中Service(服务)详解
使用startForeground让android服务前台运行


上一篇 下一篇

猜你喜欢

热点阅读