在我的应用程序中,我启动了一个包含fileobserver的服务以监视目录。我的问题是,一段时间后服务中断,如果您唤醒电话,服务将再次启动。我还尝试将观察者文件挂接到服务内部的静态变量,但是它仍然无法正常工作。谁能给我一个在电话启动时启动的服务中执行的fileobserver示例,而在电话入睡时不会中断呢?
答案 0 :(得分:0)
服务永远不会永远运行,并且这种行为很可能是由打mode模式引起的,如果您在API级别26或更高级别上运行,则有stricter restrictions用于后台服务。
您可以运行前台服务(需要永久性通知以通知用户您的应用正在运行),但是即使前台服务在系统决定这样做时也不会被杀死
对于您的用例,您可以查看Jetpack组件中的Work Manager 。它提供了一种在内容URI更改时安排作业的方法:addContentUriTrigger()
示例代码:
// first define a worker - this will get called by the WorkManager and
// performs the code you put in doWork()
class YourWorker(context : Context, params : WorkerParameters)
: Worker(context, params) {
override fun doWork(): Result {
//your code
}
}
// add your content uri as a constraint trigger
val constraints = Constraints.Builder()
.addTriggerContentUri(YOUR_CONTENT_URI)
.build()
// create a request for the WorkManager
var req : OneTimeWorkRequest = OneTimeWorkRequestBuilder<YourWorker>()
.setConstraints(constraints)
.build()
// push your request to the WorkManager
WorkManager.getInstance().enqueue(req)
Google的官方Codelab是更好地理解这些概念的好方法:Background Work with WorkManager