手机入睡时服务中断

时间:2019-02-07 21:36:52

标签: android service wakelock sleep-mode

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

1 个答案:

答案 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