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

Android手电筒应用退出后状态栏图标闪烁问题求助

手电筒闪烁应用退出后状态栏图标异常闪烁问题解决

环境信息

  • 开发工具:Android Studio Flamingo 2022.2.1 Patch 2
  • 开发语言:Kotlin
  • 最低SDK版本:API 24(Android 7.0 Nougat)
  • 测试设备:Galaxy S21 FE 5G

问题描述

应用实现手电筒按设定频率闪烁功能,按下返回键退出后,手电筒已关闭,但状态栏的手电筒图标仍会持续闪烁2-10秒,需点击「强制停止」才能终止异常。

核心问题分析

  1. Handler任务未彻底清除:当前代码中onBackPressed直接调用finish()和System.exit(0),但绑定主线程Looper的Handler延迟任务未被清理,即使Activity销毁,Looper仍会继续执行未完成的Runnable,导致手电筒模式被反复切换,触发状态栏图标异常。
  2. closeFlashLight逻辑错误:该方法原本应负责关闭手电筒,但当前代码中如果手电筒已关闭,反而会打开它,加剧退出时的状态混乱。

解决方案

1. 修复closeFlashLight方法

让它仅负责关闭手电筒,无需判断当前状态,直接强制关闭:

private fun closeFlashLight() {
    val cameraManager = getSystemService(Context.CAMERA_SERVICE) as CameraManager
    val cameraId = cameraManager.cameraIdList[0]
    try {
        cameraManager.setTorchMode(cameraId, false)
        flashLightStatus = false
    } catch (e: CameraAccessException) {
        e.printStackTrace() // 保留异常日志,方便调试
    }
}

2. 在Activity销毁时彻底清理资源

重写onDestroy方法,确保Handler任务被清除且手电筒强制关闭(不要依赖onBackPressed,因为Activity可能通过其他方式销毁):

override fun onDestroy() {
    super.onDestroy()
    // 清除所有Handler延迟任务
    handler.removeCallbacksAndMessages(null)
    // 强制关闭手电筒
    closeFlashLight()
}

3. 优化onBackPressed方法

移除System.exit(0),Android中不建议直接调用该方法,正常finish()会触发onDestroy:

override fun onBackPressed() {
    finish()
}

4. 优化startFlashLight的任务调度逻辑

确保每次启动闪烁前先清理旧任务,避免重复调度:

fun startFlashLight() {
    handler.removeCallbacksAndMessages(null) // 先清理旧任务
    openFlashLight()
    flashLightOn = true

    handler.postDelayed(object: Runnable {
        override fun run() {
            if (flashLightOn) {
                closeFlashLight()
            } else {
                openFlashLight()
            }
            flashLightOn = !flashLightOn
            handler.postDelayed(this, counter)
        }
    }, counter)
}

原理说明

Handler绑定的是主线程的Looper,即使Activity销毁,Looper仍在运行,未被清除的Runnable会继续执行,导致手电筒模式被反复切换,状态栏图标因此异常闪烁。在onDestroy中清理Handler任务并强制关闭手电筒,能确保所有相关操作都被终止,避免残留任务影响系统状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:44:56