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

如何解决单Activity应用第二次启动时出现冻结及ANR问题

如何解决单Activity应用第二次启动时出现冻结及ANR问题

我最近也碰到过类似的单Activity应用启动异常问题,结合你提供的日志和现象,咱们一步步来拆解排查:

先明确你的核心问题现象

你的应用出现了非常规律的启动异常:

  • 首次点击图标:完全正常,日志能完整走完App.onCreate→BaseActivity.onCreate→各页面组件的生命周期流程
  • 从最近任务栏划掉应用后二次启动:卡在白屏+应用图标界面,直到ANR弹窗弹出;日志只打印了BaseActivity.onPause和BaseActivity.onDestroy,完全没进入onCreate流程,ANR报告直接指向SyncForegroundService

从日志里抓关键线索

你提供的日志里有两个关键点:

  1. 首次启动时SyncForegroundService.onStartCommand被调用了,但二次启动时,这个服务的进程(PID 16489)还在独立运行,并且触发了旧Activity的销毁流程,却没有启动新的应用进程
  2. ANR原因明确是executing service com.my.package/com.my.package.component.service.SyncForegroundService,说明这个前台服务没有正确处理进程关联,导致应用重启时被旧服务进程阻塞

具体解决方案

1. 修复前台服务的生命周期逻辑

最可能的问题出在SyncForegroundService上,你需要确保应用被划掉时服务能主动终止:

  • 在服务类中重写onTaskRemoved方法,当应用从最近任务移除时主动停止服务:
    override fun onTaskRemoved(rootIntent: Intent?) {
        super.onTaskRemoved(rootIntent)
        stopForeground(STOP_FOREGROUND_REMOVE)
        stopSelf() // 彻底终止服务,避免残留进程
    }
    
  • 检查AndroidManifest.xml中服务的配置,如果不需要跨进程运行,不要设置android:process属性,让服务和应用主进程同属一个进程,避免服务孤立运行

2. 清理进程残留的资源

单例或静态对象的强引用很容易导致进程无法被系统回收:

  • 检查你的Koin模块,确保全局单例没有持有Activity、Context的强引用;在BaseActivity.onDestroy或Application.onTerminate中,调用Koin的销毁方法释放资源:
    override fun onTerminate() {
        super.onTerminate()
        stopKoin() // 退出时释放Koin资源
    }
    
  • 排查是否有其他静态变量、后台任务持有应用组件的引用,导致进程被残留服务“挂住”

3. 避免主线程阻塞

从ANR报告的CPU压力数据(avg300=5.06)来看,服务可能在持续占用CPU资源:

  • 把SyncForegroundService中的同步操作(比如IO、数据库读写、网络请求)全部移到后台线程,用Coroutine或WorkManager处理,绝对不要在主线程执行耗时操作
  • 在App.onCreate中添加全局异常捕获,排查是否有隐藏的未捕获异常导致启动流程中断:
    override fun onCreate() {
        super.onCreate()
        Thread.setDefaultUncaughtExceptionHandler { thread, throwable ->
            Log.e("AppStartup", "Uncaught exception", throwable)
            // 可以在这里做一些紧急清理操作
        }
    }
    

4. 用工具定位阻塞点

如果上述修改后还是有问题,用Android Studio的Profiler工具抓线程快照:

  • 二次启动应用时,立刻打开Profiler的CPU Profiler,查看主线程的调用栈,就能明确是哪个方法卡住了启动流程

验证步骤

修改完成后,先卸载重装应用(避免旧进程残留),然后测试:

  1. 首次启动应用,确认流程正常
  2. 从最近任务栏划掉应用
  3. 二次点击图标启动,查看日志是否能正常进入onCreate流程,不再出现ANR

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 11:03:00