phone 入睡时服务中断

Service interrupted when the phone falls asleep

在我的应用程序中,我启动了一个包含文件观察器的服务来监视目录。我的问题是,一段时间后服务中断,如果您唤醒 phone 服务会再次启动。我还尝试将观察者文件挂接到服务内的静态变量,但它仍然不起作用。谁能给我一个在 phone 启动时启动并且在 phone 入睡时不中断的服务中执行的 fileobserver 的示例?

服务从未打算永远运行,这种行为很可能是由打瞌睡模式引起的,如果您运行处于API 26 级或更高级别,则stricter restrictions 用于 后台服务

您可以 运行 一个 前台服务 (需要永久通知以告知用户您的应用正在 运行ning),但即使是前台服务当系统决定这样做时不被杀死是不安全的。

对于您的用例,您可以查看 Work Manager from the Jetpack Components. It offers a method to schedule a Job when a content URI changes: 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