后台服务 运行

Service running in the background

我想要实现的是创建一个服务(?),一旦安装了应用程序,它就会starts/gets注册,并将监控项存储在数组中。这些项目是有有效期的产品,所以如果今天是到期日,我想显示一个关于它的通知,无论应用程序当前是否 运行。

我已经在互联网和 Android 开发者网站上搜索了答案,这是我学到的:

  1. 我需要在 onStartCommand return "START_STICKY" 中创建一个服务,并在我的 android Manifest.xml 文件中指定 Activity 处于 SingleTop 启动模式.
  2. 我需要将此服务与我的 Activity 绑定,以便以一种或另一种方式传递数据。

我不知道怎么做的是:

  1. 从哪里启动服务,所以只有 1 个实例?
  2. 如何检查存储在数组(在服务中或 Activity)中的到期日期,例如一天一次?
  3. 包含产品的数组,它是否应该是静态的以便可以从 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 的现代版本中,服务在被杀死之前可以进行多少后台处理是有限制的。这些都不是一个好的监控解决方案。幸运的是你实际上不需要监控,你只需要在某个时间被提醒,这非常适合报警。