一、定义一个Service
创建service,项目-----New----Service-----service
Exported属性表示暴露给外部其他程序访问,Enable属性表示是否启用
创建之后的代码:
class MyService : Service() {
override fun onBind(intent: Intent): IBinder {
TODO("Return the communication channel to the service.")
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
return super.onStartCommand(intent, flags, startId)
}
override fun onDestroy() {
super.onDestroy()
}
}
onBind()方法时Service中唯一的抽象方法,必须在子类中实现。onCreate()、onStartCommand()和 onDestroy() 时Service中常见的方法,onCreate()方法在创建Service的时候调用,onStartCommand()方法会在每次Service启动的时候调用,onDestroy()会在Service销毁的时候调用,另外,每一个Service需要在manifest中注册才能使用。
二、启动和停止Service
具体代码:
startServiceBtn.setOnClickListener {
val intent=Intent(this,MyService::class.java)
startService(intent)
}
stopServiceBtn.setOnClickListener {
val intent=Intent(this,MyService::class.java)
stopService(intent
)
}
在MyService中修改代码如下:
class MyService : Service() {
val TAG="MyService"
override fun onCreate() {
super.onCreate()
Log.d(TAG, "onCreate: ")
}
override fun onBind(intent: Intent): IBinder {
TODO("Return the communication channel to the service.")
Log.d(TAG, "onBind: ")
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Log.d(TAG, "onStartCommand: ")
return super.onStartCommand(intent, flags, startId)
}
override fun onDestroy() {
super.onDestroy()
Log.d(TAG, "onDestroy: ")
}
}
打印日志:
com.app.activitytest D/MyService: onCreate:
com.app.activitytest D/MyService: onStartCommand:
com.app.activitytest D/MyService: onDestroy:
MyService中的onCreate()和onStartCommand()方法都执行了,说明Service确实启动了,onCreate()方法是在Service第一次创建的时候调用,onStartCommand()方法是每次启动Service的时候会调用
。onDestroy()方法表示停止服务。
注意在Android8.0之后应用的后台功能大幅度削减,只有在保持前台功能可见的情况下,Service才能稳定运行,一旦进入后台之后,Service随时可能被回收。
网友评论