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

Android Activity onResume中GPS检测逻辑重复执行问题求解

Android onResume GPS检测重复执行优化方案

核心解决思路是通过场景标记位区分页面返回来源,既保留用户从最近任务切回应用时自动重连硬件的能力,又避免从GPS设置页返回时逻辑重复执行。

具体实现步骤如下:

  • 新增两个全局布尔标记位
    // 标记是否从GPS设置页返回
    private var isReturnFromGpsSetting = false
    // 标记硬件连接流程是否正在执行,避免重复触发
    private var isHardwareConnecting = false
    
  • 跳转GPS设置页时修改标记位
    触发跳转逻辑前将isReturnFromGpsSetting置为true:
    val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
    isReturnFromGpsSetting = true
    startActivityForResult(intent, REQUEST_CODE_GPS_SETTING)
    
  • 改造onResume逻辑,增加分支判断
    进入onResume时先校验标记位,如果是从设置页返回、或者硬件连接流程已经在执行,就跳过原有检测逻辑:
    override fun onResume() {
        super.onResume()
        // 符合以下任意条件就跳过原有检测逻辑
        if (isReturnFromGpsSetting || isHardwareConnecting) {
            return
        }
        // 原有检测逻辑
        checkLocationPermission { hasPermission ->
            if (hasPermission && isGpsEnabled()) {
                startHardwareConnect()
            } else if (hasPermission && !isGpsEnabled()) {
                jumpToGpsSetting()
            }
        }
    }
    
  • onActivityResult执行完逻辑后复位标记位
    用户从设置页返回后,在onActivityResult中处理后续逻辑,执行完成后复位标记位:
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == REQUEST_CODE_GPS_SETTING) {
            if (isGpsEnabled()) {
                startHardwareConnect()
            }
            // 复位标记位,不影响后续切后台再返回的逻辑执行
            isReturnFromGpsSetting = false
        }
    }
    

边界兼容:如果应用退后台后进程被系统回收,可在onSaveInstanceState中存储两个标记位的状态,在onCreate/onRestoreInstanceState中恢复,避免状态丢失。

可选优化:

  • 若项目已适配AndroidX Activity 1.2.0+版本,可将startActivityForResult替换为Activity Result API,逻辑拆分更清晰,标记位管理更简单。
  • 硬件连接方法内部加状态校验,若已处于连接中/已连接状态直接返回,进一步避免重复连接异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:54:10