Skip to content

Service入门

Posted on:March 12, 2020 at 23:55:13 GMT+8

Service是一种可以在后台执行长时间运行操作而不提供界面的应用组件。

服务类型

前台

后台

绑定

服务和线程

服务在其托管进程的主线程中运行,它既不创建自己的线程,也不在单独的进程中运行(除非另行指定)。所以如果需要在服务中执行CPU密集操作或阻塞式操作,则需要在服务中创建新的线程来完成。

基础

在清单文件中声明服务

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

AS 创建服务时,会在清单文件中帮我们自动声明。

新建启动服务

新建启动服务,即实现一个自定义的Service子类。

可以通过继承Service 类或IntentService类实现。

继承Service

继承IntentService

启动服务

启动服务,通过一个组件调用startService()来实现,这会调用服务的onStartCommand()

Intent(this, HelloService::class.java).also { intent ->
    startService(intent)
}

停止服务

新建绑定服务

绑定服务允许应用组件通过调用 bindService() 与其绑定,从而创建长期连接。

前台服务

前台服务必须在状态栏显示通知。

val pendingIntent: PendingIntent =
        Intent(this, ExampleActivity::class.java).let { notificationIntent ->
            PendingIntent.getActivity(this, 0, notificationIntent, 0)
        }

val notification: Notification = Notification.Builder(this, CHANNEL_DEFAULT_IMPORTANCE)
        .setContentTitle(getText(R.string.notification_title))
        .setContentText(getText(R.string.notification_message))
        .setSmallIcon(R.drawable.icon)
        .setContentIntent(pendingIntent)
        .setTicker(getText(R.string.ticker_text))
        .build()

startForeground(ONGOING_NOTIFICATION_ID, notification)

服务的生命周期

服务从创建到销毁的生命周期可遵循以下任一路径:

两条路径并非完全独立。

实现生命周期回调

参考

服务概览

2020-3-12 23:29:08