# 应用使用过程中自动退出

#### 问题现象

应用在使用过程中出现自动退出的情况，该如何定位？

#### 背景知识

*   用户在使用应用时，如果出现点击无反应或应用无响应等情况，并且持续时间超过一定限制，就会被定义为应用无响应，详情参考AppFreeze（应用冻屏）检测。
*   AppFreeze日志规格说明可以参考日志规格。
*   onAreaChange：组件区域变化时触发该回调。仅会响应由布局变化所导致的组件大小、位置发生变化时的回调。
*   HiSmartPerf：无需ROOT设备，即可准确、高效地采集到应用运行时的CPU、GPU等性能数据，了解应用的性能状况。

#### 问题定位

1.  查看faultlogger目录下的AppFreeze日志，主线程发生卡死，当前任务从08:19:21.148开始执行，到08:19:27.416还未执行结束，执行时间超过6s。
    
    ```
    Main handler dump start time: 2025-07-03 08:19:27.416
    mainHandler dump is:
     EventHandler dump begin curTime: 2025-07-03 08:19:27.416
     Event runner (Thread name = , Thread ID = 61389) is running
     Current Running: start at 2025-07-03 08:19:21.148, Event { send thread = 62421, send time = 2025-07-03 08:19:21.148, handle time = 2025-07-03 08:19:21.148, trigger time = 2025-07-03 08:19:21.148, task name = , caller = [native_safe_async_work.cpp(PostTask:451)] }
     History event queue information:
    ```
    
2.  搜索关键字TID:进程ID(PID)，获取应用栈信息，3s栈和6s栈因为超时获取失败。
    
    ```
    Failed to dump normal stacktrace for 61389
    Reason:
    normal stack:failed to fully dump due to timeout
    Tid:61389, Name:com.hx.example
    #00 pc 00000000001cc674 /system/lib/ld-musl-aarch64.so.1
    #01 pc 00000000001d2658 /system/lib/ld-musl-aarch64.so.1
    #02 pc 00000000000a291c /system/lib/ld-musl-aarch64.so.1
    #03 pc 000000000014ab24 /data/storage/el1/bundle/libs/arm64/libentry.so
    #04 pc 0000000000149164 /data/storage/el1/bundle/libs/arm64/libentry.so
    #05 pc 00000000002a21e4 /data/storage/el1/bundle/libs/arm64/libentry.so
    #06 pc 0000000005d22478 /data/storage/el1/bundle/libs/arm64/libkn.so
    #07 pc 0000000005d206b0 /data/storage/el1/bundle/libs/arm64/libkn.so
    #08 pc 0000000005d6d884 /data/storage/el1/bundle/libs/arm64/libkn.so
    ```
    
3.  使用HiSmartPerf工具抓取该过程的Trace信息，观察到处理onAreaChange接口时间达到16s，远远超过一般的耗时（us级）。
    

#### 分析结论

onAreaChange接口耗时太长导致应用卡死，随后自动退出。

#### 修改建议

将onAreaChange接口中的耗时业务放到子线程处理，参考文档使用多线程能力。