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

React Native安卓API33后台定位任务运行10-15分钟后被杀死求助

解决方案

一、修复Screen Fragments恢复报错

该报错是应用被杀重启时,react-native-screens的Fragment恢复逻辑冲突导致,按以下步骤处理:

  • 修改MainActivity.java(或MainActivity.kt)的onCreate方法,传入null作为savedInstanceState参数,阻止系统恢复Fragment:
    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(null); // 避免恢复之前的Fragment状态
    }
    
  • 确保AndroidManifest.xml中MainActivity的启动模式配置为singleTask:
    <activity
      android:name=".MainActivity"
      android:launchMode="singleTask"
      ...>
    </activity>
    

二、解决后台任务10-15分钟被杀死的问题

针对Android API 33(Android 13)的后台限制,需结合前台服务与权限配置优化:

  1. 配置前台服务权限
    在AndroidManifest.xml中添加必要权限:
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    
  2. 用前台服务承载后台任务
    react-native-background-timer的普通后台定时器在Android 12+会被系统限制,需将定位和定时器逻辑放到前台服务中运行:
    • 创建自定义Android前台服务,在服务内启动定位与定时器任务
    • 启动服务时必须显示持续通知(前台服务强制要求),示例代码:
      Notification notification = new NotificationCompat.Builder(this, "LOCATION_TRACKING_CHANNEL")
        .setContentTitle("定位追踪中")
        .setContentText("应用正在后台追踪位置")
        .setSmallIcon(R.mipmap.ic_launcher)
        .build();
      startForeground(1, notification);
      
  3. 确保定位权限完整授权
    • 运行时动态申请ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION和ACCESS_BACKGROUND_LOCATION权限,用户必须允许后台定位,否则后台无法获取位置
    • 调整react-native-geolocation配置以降低资源消耗:
      Geolocation.watchPosition(
        (position) => { /* 处理位置数据 */ },
        (error) => { /* 处理错误 */ },
        {
          enableHighAccuracy: false, // 非必要时关闭高精度,减少耗电
          distanceFilter: 100, // 位置变化超100米才触发更新
          interval: 60000, // 每分钟更新一次
          fastestInterval: 30000,
          showsLocationDialog: false,
          requestPermissions: true
        }
      );
      
  4. 关闭应用电池优化
    在模拟器设置中:
    • 进入「设置」→「电池」→「电池优化」
    • 找到目标应用,设置为「不优化」
  5. 优化内存使用
    • 检查代码中是否存在未取消的订阅、未释放的定时器或监听器,避免内存泄漏
    • 使用React Native DevTools检测内存占用,排查潜在泄漏点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:25:16