我正在运行后台计时器任务,每小时执行一些计算工作。我的问题是,如果我能以某种方式将任务设置为以低于其他任务的优先级运行。或者,如果资源不足(例如,内存低于50%,电池低于30%,CPU高于60%),则可以跳过任务运行。只要我稳定运行,每次计算都不是强制性的。
你可以建议我这样做的方法吗?我真的不想让我的应用搞砸用户的体验,特别是当用户正在玩游戏,听音乐,看电影等时。答案 0 :(得分:2)
有多种方法可以节省资源:
在创建后调用setPriority(Thread.MIN_PRIORITY)
的额外主题中执行您的工作。这样,您的线程将以最低优先级进行调度。每小时唤醒一次这个帖子。
考虑使用AlarmManager.setInexactRepeating(AlarmManager.INTERVAL_HOUR)
唤醒您的应用以进行工作。这节省了能量,因为“系统可以调整警报的交付时间,使它们同时发射,避免将设备从睡眠状态唤醒到超过必要的程度。”
您可以使用ActivityManager.getMyMemoryState()
来确定系统内存是否紧张。如果此次调用填充的lastTrimLevel
对象的字段ActivityManager.RunningAppProcessInfo
为TRIM_MEMORY_RUNNING_CRITICAL
或TRIM_MEMORY_RUNNING_LOW
,则应跳过执行任务。