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

Android Studio锁屏时保持网络连接,避免后台断网

Android后台持续保持网络连接的解决方案

1. 用前台服务提升进程优先级

Android锁屏后会严格限制后台资源,普通后台进程很容易被回收。前台服务能让进程处于高优先级状态,降低被系统杀死的概率,以此维持网络连接。

  • 先在Manifest里声明权限:
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <!-- Android 12+ 需额外声明对应类型权限 -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_CONNECTIVITY" />
    
  • 实现前台服务类:
    class NetworkKeepAliveService : Service() {
        override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
            // 创建前台通知(必须显示,系统强制要求)
            val notification = NotificationCompat.Builder(this, "NETWORK_KEEP_ALIVE_CHANNEL")
                .setContentTitle("维持网络连接")
                .setContentText("应用后台保持网络活跃")
                .setSmallIcon(R.drawable.ic_notify_icon)
                .build()
            startForeground(1, notification)
            return START_STICKY
        }
    
        override fun onBind(intent: Intent): IBinder? = null
    }
    
  • 在需要时启动服务:startService(Intent(this, NetworkKeepAliveService::class.java))

2. 使用唤醒锁防止设备深度睡眠

唤醒锁能让CPU保持活跃,避免设备进入深度睡眠后切断网络,但注意不要滥用,会增加耗电。

  • 声明权限:
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    
  • 获取并使用唤醒锁:
    val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
    val wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::NetworkWakeLock")
    wakeLock.acquire() // 按需设置超时,比如 wakeLock.acquire(3600000L) 表示1小时后自动释放
    
  • 不用时务必释放:wakeLock.release()

3. 优化网络请求配置

通过长连接和心跳包维持网络会话:

  • 以OkHttp为例,配置连接池和超时,保持长连接:
    val okHttpClient = OkHttpClient.Builder()
        .connectTimeout(30, TimeUnit.SECONDS)
        .readTimeout(30, TimeUnit.SECONDS)
        .writeTimeout(30, TimeUnit.SECONDS)
        .connectionPool(ConnectionPool(5, 5, TimeUnit.MINUTES))
        .build()
    
  • 每隔几分钟发送一个极小的心跳请求(比如GET一个空接口),让服务器和设备都保持连接活跃。

4. 适配系统电池优化

引导用户把应用加入电池优化白名单,避免系统锁屏后限制应用的网络和进程:

  • 检测并跳转至设置页面:
    val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
    if (!powerManager.isIgnoringBatteryOptimizations(packageName)) {
        val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
        intent.data = Uri.parse("package:$packageName")
        startActivity(intent)
    }
    
  • 注意:这个操作需要用户手动授权,要在应用里说明清楚为什么需要关闭电池优化,比如“为了保证后台实时数据同步,需要您将应用加入电池优化白名单”。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:40:28