我想每5分钟安排一次后台服务。我正在使用HandlerThread和Handler管理线程,并使用JobIntentService来完成任务。我的代码正在运行到我的表盘的onCreate方法中,该方法始终显示在我的智能手表上。
该设备基于Wear OS,发生的情况是,在调试设备并将智能手表连接到电缆时,我的代码可以正常工作。但是,当我断开智能手表的连接并且表盘进入某种省电模式(对于Wear OS开发人员而言是=环境模式)时,我的问题就开始了:
突然,系统没有在指定的时间安排线程,我开始有延迟。我想在每个特定的时间运行我的服务。
我不知道我是否应该使用警报管理器。
这是处理程序的代码:
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)
}
}