本文介绍: 从Andr oid 8.0 系统开始,只有当应用保持在前台可见状态的情况下,Service 才能保证稳定运行,一旦应用进入后台之后,Service 随时都有可能系统回收前台Service启动后 即使退出应用程序,MyService 也会一直处于运行状态,而且不用担心会被系统回收前台Service 和普通Service 最大区别就在于:它一直会有一个正在运行图标系统状态栏显示下拉状态栏可以看到更加详细信息,非常类似于通知效果

前台Service 和普通Service 最大的区别就在于:它一直会有一个正在运行图标系统状态栏显示下拉状态栏可以看到更加详细的信息,非常类似于通知效果

从Andr oid 8.0 系统开始,只有当应用保持在前台可见状态的情况下,Service 才能保证稳定运行,一旦应用进入后台之后,Service 随时都有可能系统回收。前台Service启动后 即使退出应用程序,MyService 也会一直处于运行状态,而且不用担心会被系统回收

当然,MyService 所对应通知也会一直显示状态栏上面。如果用户不希望我们程序一直运行,也可以选择手动杀掉应用,这样MyService 就会跟着一起停止运行了。

class MyService : Service() { 
	...
	override fun onCreate() { 
		super.onCreate()
		Log.d("MyService", "onCreate executed")
		val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
			val channel = NotificationChannel("my_service", "前台Service通知", NotificationManager.IMPORTANCE_DEFAULT)
			manager.createNotificationChannel(channel) 
		}
		val intent = Intent(this, MainActivity::class.java)
		val pi = PendingIntent.getActivity(this, 0, intent, 0)
		val notification = NotificationCompat.Builder(this, "my_service")
			.setContentTitle("This is content title")
			.setContentText("This is content text")
			.setSmallIcon(R.drawable.small_icon) 
			.setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.large_icon)) 
			.setContentIntent(pi)
			.build()
			
		/**
		这次在构建Notification对象后并没有使用NotificationManager 将通知显示出来,而是调用startForeground()方法调用方法后就会让MyService 变成一个前台Service,并在系统状态栏显示出来。

		参数:
		第一个参数是通知的id,类似于notify()方法第一个参数;
		第二个参数构建的Notification对象。
		*/
		startForeground(1, notification)
	}
	... 
}

原文地址:https://blog.csdn.net/m0_60641871/article/details/134731057

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_38120.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注