Проблема планирования повторяющегося фонового сервиса в Watch Face (Wear OS) - PullRequest
0 голосов
/ 02 октября 2018

Я хочу планировать фоновый сервис каждые 5 минут.Я использую HandlerThread и Handler для управления потоками и JobIntentService для выполнения задачи.Мой код работает в методе onCreate моего циферблата, который является основным приложением, которое всегда отображается на моих умных часах.

Устройство работает на основе ОС OS, и в результате мой код работает отлично, когда ям, отладка и SmartWatch подключен к кабелю.Но моя проблема начинается, когда я отсоединяю умные часы, и циферблат переходит в режим энергосбережения (= режим окружения для разработчиков 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)
    }
}
...