android - 在 Watch Face (Wear OS) 中安排重复后台服务的问题
问题描述
我想每 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)
}
}
解决方案
推荐阅读
- c++ - 我应该在哪里包括
- kubernetes - Kubernetes 请求不平衡
- python - python - 为什么在python OOP中将相同的对象附加到不同的列表时会得到不同的对象ID?
- node.js - 无法在 index.js 中找到 css
- swift - 自定义 tableView 单元格内部:UILabel 的背景超出文本长度(以编程方式)
- postgresql - 将现有表数据导入不同数据库中的新表(postgres)
- postgresql - 在反向整数对中使用 DISTINCT 重复消除
- node.js - 如何使用 node.js 解析带有转义双引号的 JSON?
- r - 将情节编织成文字,情节的大小被压扁
- git - 子目录中的 Git 挂钩