后台服务 运行
Service running in the background
我想要实现的是创建一个服务(?),一旦安装了应用程序,它就会starts/gets注册,并将监控项存储在数组中。这些项目是有有效期的产品,所以如果今天是到期日,我想显示一个关于它的通知,无论应用程序当前是否 运行。
我已经在互联网和 Android 开发者网站上搜索了答案,这是我学到的:
- 我需要在 onStartCommand return "START_STICKY" 中创建一个服务,并在我的 android Manifest.xml 文件中指定 Activity 处于 SingleTop 启动模式.
- 我需要将此服务与我的 Activity 绑定,以便以一种或另一种方式传递数据。
我不知道怎么做的是:
- 从哪里启动服务,所以只有 1 个实例?
- 如何检查存储在数组(在服务中或 Activity)中的到期日期,例如一天一次?
- 包含产品的数组,它是否应该是静态的以便可以从 Activity 和服务访问它,或者我应该创建它的单独实例并通过 Binder 相应地传递数据?
总的来说,我知道基础知识以及它应该如何工作,但我不知道如何实施它才能有效。
谢谢大家的回答! :)
// 编辑
目前我的自定义服务的一些代码:
class ExpiryMonitorService : Service() {
private val productsArray: ArrayList<ProductEntry> = ArrayList()
// Binder which will be given to clients
private val mBinder: IBinder = LocalBinder()
inner class LocalBinder : Binder() {
fun getService() : ExpiryMonitorService {
// Return this instance of ExpiryMonitorService so clients can call public methods
return this@ExpiryMonitorService
}
}
override fun onBind(intent: Intent?): IBinder {
return mBinder
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
return START_STICKY // Restart this service if it gets killed by the system
}
}
答案不是服务。它是一个 AlarmManager(或 JobScheduler),设置为到期项目的到期时间,以及项目和到期日期的数据库。当作业停止时,它会发送通知并根据数据库中的数据安排下一个 alarm/job。
服务不是答案,因为可以随时终止服务以获取资源。此外,在 Android 的现代版本中,服务在被杀死之前可以进行多少后台处理是有限制的。这些都不是一个好的监控解决方案。幸运的是你实际上不需要监控,你只需要在某个时间被提醒,这非常适合报警。
我想要实现的是创建一个服务(?),一旦安装了应用程序,它就会starts/gets注册,并将监控项存储在数组中。这些项目是有有效期的产品,所以如果今天是到期日,我想显示一个关于它的通知,无论应用程序当前是否 运行。
我已经在互联网和 Android 开发者网站上搜索了答案,这是我学到的:
- 我需要在 onStartCommand return "START_STICKY" 中创建一个服务,并在我的 android Manifest.xml 文件中指定 Activity 处于 SingleTop 启动模式.
- 我需要将此服务与我的 Activity 绑定,以便以一种或另一种方式传递数据。
我不知道怎么做的是:
- 从哪里启动服务,所以只有 1 个实例?
- 如何检查存储在数组(在服务中或 Activity)中的到期日期,例如一天一次?
- 包含产品的数组,它是否应该是静态的以便可以从 Activity 和服务访问它,或者我应该创建它的单独实例并通过 Binder 相应地传递数据?
总的来说,我知道基础知识以及它应该如何工作,但我不知道如何实施它才能有效。
谢谢大家的回答! :)
// 编辑
目前我的自定义服务的一些代码:
class ExpiryMonitorService : Service() {
private val productsArray: ArrayList<ProductEntry> = ArrayList()
// Binder which will be given to clients
private val mBinder: IBinder = LocalBinder()
inner class LocalBinder : Binder() {
fun getService() : ExpiryMonitorService {
// Return this instance of ExpiryMonitorService so clients can call public methods
return this@ExpiryMonitorService
}
}
override fun onBind(intent: Intent?): IBinder {
return mBinder
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
return START_STICKY // Restart this service if it gets killed by the system
}
}
答案不是服务。它是一个 AlarmManager(或 JobScheduler),设置为到期项目的到期时间,以及项目和到期日期的数据库。当作业停止时,它会发送通知并根据数据库中的数据安排下一个 alarm/job。
服务不是答案,因为可以随时终止服务以获取资源。此外,在 Android 的现代版本中,服务在被杀死之前可以进行多少后台处理是有限制的。这些都不是一个好的监控解决方案。幸运的是你实际上不需要监控,你只需要在某个时间被提醒,这非常适合报警。