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

如何实现每次设备联网时自动触发WorkManager执行服务器同步任务

可行实现方案

你可以组合使用系统网络状态监听 + WorkManager 实现每次联网触发同步的需求,不需要依赖已废弃的Firebase JobScheduler,具体实现如下:

方案核心逻辑

原有3小时周期的PeriodicWorkRequest可以保留作为兜底同步机制,额外新增网络连接事件的实时监听,每次监听到联网事件时主动触发一次同步任务,就能覆盖两次周期间临时联网的场景。

具体实现步骤

  • 首先在应用全局(比如Application类)动态注册ConnectivityManager.NetworkCallback监听网络状态,安卓7.0及以上版本不再支持静态注册联网广播,必须用动态注册的回调实现监听:
// 先声明网络回调
val networkCallback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        // 网络连接成功,触发同步任务
        triggerSyncWork()
    }
}

// 在Application onCreate中注册回调
val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
connectivityManager.registerDefaultNetworkCallback(networkCallback)
  • 实现triggerSyncWork方法,入队一次性Work任务,同时做去重处理避免短时间多次触发:
private fun triggerSyncWork() {
    val constraints = Constraints.Builder()
        .setRequiredNetworkType(NetworkType.CONNECTED)
        .build()
    val syncWork = OneTimeWorkRequestBuilder<ExampleWorker>()
        .setConstraints(constraints)
        .build()
    WorkManager.getInstance(context)
        .enqueueUniqueWork(
            "one_time_sync_tag",
            ExistingWorkPolicy.KEEP, // 已有相同任务在队列时不重复入队
            syncWork
        )
}

注意事项

  • 如果应用需要在后台也能收到联网事件,可酌情申请后台运行权限,但要符合各厂商的后台保活规则,避免被系统查杀。
  • 同步逻辑如果有幂等性要求,记得在ExampleWorker中做重复请求的校验,避免数据重复提交。

内容的提问来源于stack exchange,提问作者Moiz Hassan Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:00:04