服务在后台运行

时间:2018-07-25 12:52:41

标签: android service background-process android-binder

我要实现的是创建一个Service(?),一旦安装了Application,它便启动/获取注册,并将监视器项存储在Array中。这些项目是具有到期日期的产品,因此,如果今天是到期日期,则无论应用程序当前是否在运行,我都希望显示有关此消息的通知。

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

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

我不知道该怎么办:

  1. 在哪里启动服务,因此只有一个实例?
  2. 例如每天如何检查一次存储在阵列(服务或活动中)中的失效日期?
  3. 包含产品的数组,应该是静态的,以便可以从Activity和Service中访问它,还是我应该为其创建单独的实例并通过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
}


}

1 个答案:

答案 0 :(得分:1)

答案不是一项服务。它的AlarmManager(或JobScheduler)设置为关闭到期项目的到期时间,以及项目和到期日期的数据库。作业结束后,它将发送通知,并根据数据库中的数据安排下一个警报/作业。

服务不是解决方案,因为服务可以随时被资源占用。此外,在现代版本的Android上,服务在被终止之前可以进行多少后台处理受到限制。这些都不是一个好的监视解决方案。幸运的是,您实际上不需要监视,只需要在特定时间收到警报即可,这非常适合发出警报。