在Watch Face(Wear OS)中调度重复后台服务的问题

我想每5分钟安排一次后台服务 . 我正在使用HandlerThread和Handler来管理线程和JobIntentService来完成任务 . 我的代码运行到我的表盘的onCreate方法,这是我的智能 Watch 上始终显示的主要应用程序 .

该设备是基于Wear OS的,当我调试它并且智能 Watch 连接到电缆时,我的代码工作正常 . 但是当我断开智能 Watch 并且表盘进入省电模式(= Wear OS开发人员的环境模式)时,我的问题就出现了:

突然,系统没有在指定的时间内安排线程,我开始有延迟 . 我想在每个特定时间运行我的服务 .

我不知道是否应该使用Alarm Manager .

这是处理程序的代码:

fun manageTestingTaskSchedule() {
    val handlerThread = HandlerThread("handler-thread", Process.THREAD_PRIORITY_URGENT_AUDIO)
    handlerThread.start()
    val handler = Handler(handlerThread.looper)
    handler.postAtFrontOfQueue(RunnableTestingTask(this@MyWatchFaceSOSApp, handler))
}

我给予线程最高优先级,以便在安排它们时不会出现延迟 .

这是运行服务的线程的代码:

class RunnableTestingTask(val watchfaceContext: Context, val handler: Handler): Runnable {
    val TAG = "RunnableTestingTask"
    override fun run() {
        val currentThread = Thread.currentThread()
        Log.i(TAG, "Thread name : " + currentThread.name + " thread priority : " + Process.getThreadPriority(Process.myTid()))

        if(WifiConnectivityChecker(watchfaceContext).isConnectedWifi()) {
            val sosMsgToGatewayIntent = Intent()
            PresenceReportService().enqueueWork(watchfaceContext, sosMsgToGatewayIntent)
        } else if(!WifiConnectivityChecker(watchfaceContext).isConnectedWifi()) {
            Log.i(TAG, "La conexion WIFI con la pasarela no se ha establecido")
        }
        handler.postDelayed(this, 300000)
    }
}

回答(0)