Android Service简介

2017-05-09  本文已影响131人  b7cda9616c52

关于服务的参考资料

什么是服务

简而言之,服务是可以不依赖于界面而在后台长期运行的组件,即便用户切换到了其他应用也丝毫不受影响。其他组件可绑定到服务,与之交互,甚至进程间通信(IPC)。

服务分类

服务按启动的方式可分为启动服务(startService())和绑定服务(bindService())。

服务按用户是否可意识到可分为前台服务(startForeground())和后台服务。

在前台运行服务

其实前台服务也看不见,你能看见的只有界面(Activity)和通知,只是用户可以感知到。
前台服务被认为是用户主动意识到的一种服务,因此在内存不足时,系统也不会考虑将其终止。 前台服务必须为状态栏提供通知,状态栏位于“正在进行”标题下方,这意味着除非服务停止或从前台删除,否则不能清除通知。

例如,应该将播放音乐的服务设置为在前台运行,这是因为用户能够听见有音乐在播放,用户可明确意识到其操作。 状态栏中的通知可能表示正在播放的歌曲,并允许用户启动 Activity 来与音乐播放器进行交互。

在清单文件中注册服务

服务是四大组件之一,所以需要在清单文件中注册:

<manifest ... >
  ...
  <application ... >
      <service android:name=".ExampleService" />
      ...
  </application>
</manifest>

语法:

<service android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:icon="drawable resource"
         android:isolatedProcess=["true" | "false"]
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string" >
    . . .
</service>

属性解释:

Service 的生命周期

来自官网的服务的生命周期图:https://developer.android.com/guide/components/services.html#Lifecycle

Service 的生命周期图

onCreate()
首次创建服务时,系统将调用此方法来执行一次性设置程序(在调用 onStartCommand() 或 onBind() 之前)。如果服务已在运行,则不会调用此方法。

onStartCommand()
每次调用 startService(Intent) 方法的时候都会回调 onStartCommand() 方法,可通过 Intent 传递所需的数据进来,系统也会为自动分配一个 startId。注意不可直接调用该方法。

onBind()
当另一个组件想通过调用 bindService() 与服务绑定(例如执行 RPC)时,系统将调用此方法。在此方法的实现中,您必须通过返回 IBinder 提供一个接口,供客户端用来与服务进行通信。请务必实现此方法,但如果您并不希望允许绑定,则应返回 null。

onDestroy()
当服务不再使用且将被销毁时,系统将调用此方法。服务应该实现此方法来清理所有资源,如线程、注册的监听器、接收器等。 这是服务接收的最后一个调用。

上一篇下一篇

猜你喜欢

热点阅读