You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 13下如何实现锁屏状态下每2秒持续HTTP轮询?

Android锁屏下持续2秒轮询的实现方案

针对三星设备的核心解决步骤

1. 升级前台服务优先级

别用普通前台服务,给通知设置最高优先级,降低系统回收进程的概率:

val notification = NotificationCompat.Builder(this, "emergency_channel")
    .setContentTitle("医疗应急服务运行中")
    .setContentText("持续维持服务器连接")
    .setSmallIcon(R.drawable.ic_emergency)
    .setPriority(NotificationCompat.PRIORITY_HIGH) // Android O及以上改用IMPORTANCE_HIGH
    .build()
startForeground(1001, notification)

2. 加Partial唤醒锁保持CPU运行

锁屏后CPU会进入休眠状态,必须获取Partial唤醒锁强制维持CPU工作,注意用完及时释放:

val powerManager = getSystemService(POWER_SERVICE) as PowerManager
val wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "EmergencyApp::PollLock")
// 设置10分钟超时,避免异常场景下持续占用资源
wakeLock.acquire(600000L)
// 轮询请求执行完成后,务必释放唤醒锁
// wakeLock.release()

需要在Manifest中添加权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />

3. 适配三星隐藏的省电限制

仅关闭电池优化不够,还需检查以下系统设置:

  • 进入设置 -> 高级功能 -> 优化电池使用 -> 未监视的应用,将你的应用加入列表
  • 打开电池和设备维护 -> 电池 -> 背景使用限制,彻底关闭该应用的背景限制
  • 开启开发者选项,将不保留活动设为关闭状态,防止系统随意销毁后台进程

4. 兜底方案:WorkManager精确周期任务(Android 12+)

如果前序方案仍不稳定,可使用WorkManager的精确任务触发轮询,配合唤醒锁使用:

val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.CONNECTED)
    .build()
val exactPollRequest = PeriodicWorkRequestBuilder<PollWorker>(2, TimeUnit.SECONDS)
    .setConstraints(constraints)
    .setInitialDelay(0, TimeUnit.SECONDS)
    .build()
WorkManager.getInstance(this).enqueue(exactPollRequest)

在Worker内部需获取唤醒锁执行HTTP请求,Android 12+需额外添加权限:

<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />

重要提醒

2秒一次的高频轮询会大幅增加电池消耗,作为医疗应急类应用,务必提前向用户说明这一点。测试时需在三星设备锁屏状态下持续验证至少半小时,确认轮询无中断。

内容的提问来源于stack exchange,提问作者Eli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:35:14