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

一次性加载100条数据到RecyclerView触发ANR致应用崩溃求助

一次性加载100条数据到RecyclerView引发ANR崩溃的解决方案

日志分析

从提供的ANR日志可以明确:

  • 触发核心原因:MainThread worked timeout,主线程执行耗时操作超时,无法及时响应用户或系统事件
  • 应用进程in.games.balajimarket(PID:9948)CPU占用高达102%,其中用户态占95%,说明主线程在执行大量同步耗时任务,直接导致ANR
ANR in in.app.balaji
    PID: 9948
    Reason: App requested: MainThread worked timeout
    ErrorId: 8e317451-e531-43d9-b310-42b887bfd4c2
    Frozen: false
    Load: 0.0 / 0.0 / 0.0
    ----- Output from /proc/pressure/memory -----
    some avg10=3.88 avg60=1.98 avg300=1.26 total=3095676089
    full avg10=1.37 avg60=0.64 avg300=0.38 total=996839902
    ----- End output from /proc/pressure/memory -----
    ----- Output from /proc/pressure/cpu -----
    some avg10=12.41 avg60=6.46 avg300=4.55 total=20593166863
    ----- End output from /proc/pressure/cpu -----
    ----- Output from /proc/pressure/io -----
    some avg10=3.20 avg60=1.35 avg300=0.78 total=3793799535
    full avg10=1.29 avg60=0.43 avg300=0.24 total=1815292022
    ----- End output from /proc/pressure/io -----

    CPU usage from 175018ms to -1ms ago (2024-01-25 15:46:00.073 to 2024-01-25 15:48:55.093):
      16% 1969/system_server: 8.7% user + 7.5% kernel / faults: 69086 minor 114 major
      13% 1562/surfaceflinger: 9% user + 4.7% kernel / faults: 3715 minor 65 major
      5.5% 879/adbd: 1% user + 4.4% kernel / faults: 10979 minor 2 major
      4.4% 6113/com.google.android.providers.media.module: 1.7% user + 2.7% kernel / faults: 8613 minor 126 major
      4% 4221/com.android.systemui: 2.7% user + 1.3% kernel / faults: 35944 minor 210 major
      3.6% 1405/vendor.qti.hardware.display.composer-service: 1.8% user + 1.7% kernel / faults: 325 minor
      3.5% 9952/hybridswapd:0: 0% user + 3.5% kernel
      3.5% 183/kswapd0:0: 0% user + 3.5% kernel
      2.6% 649/logd: 0.4% user + 2.1% kernel / faults: 3407 minor 34 major
      2.6% 9513/kworker/u24:0-devfreq_wq: 0% user + 2.6% kernel / faults: 180 minor
    21% TOTAL: 9.5% user + 9.8% kernel + 0.2% iowait + 1.7% irq + 0.4% softirq
    CPU usage from 189ms to 1606ms later (2024-01-25 15:48:55.280 to 2024-01-25 15:48:56.698) with 99% awake:
      169% 1969/system_server: 67% user + 101% kernel / faults: 7529 minor 341 major
    71% 12305/AnrAuxiliaryTas: 21% user + 50% kernel
    56% 2064/Signal Catcher: 34% user + 22% kernel
    7% 7096/binder:1969_1F: 2.6% user + 4.4% kernel
    5.3% 2067/HeapTaskDaemon: 4.4% user + 0.8% kernel
    4.4% 7101/binder:1969_20: 2.6% user + 1.7% kernel
    1.7% 7094/binder:1969_1D: 0.8% user + 0.8% kernel
    1.7% 12303/AnrConsumer: 0% user + 1.7% kernel
    0.8% 2074/binder:1969_2: 0.8% user + 0% kernel
    0.8% 2842/Thread-5: 0% user + 0.8% kernel
    0.8% 3211/binder:1969_4: 0% user + 0.8% kernel
    0.8% 3408/android.imms: 0% user + 0.8% kernel
    0.8% 3989/LockSettingsSer: 0.8% user + 0% kernel
    0.8% 3993/tworkPolicy.uid: 0.8% user + 0% kernel
    0.8% 3994/WifiHandlerThre: 0% user + 0.8% kernel
    0.8% 4009/ranker: 0.8% user + 0% kernel
    0.8% 4011/NotificationSer: 0% user + 0.8% kernel
    0.8% 4052/SliceManagerSer: 0% user + 0.8% kernel
    0.8% 4058/ackgroundThread: 0.8% user + 0% kernel
    0.8% 4084/init_criticallo: 0% user + 0.8% kernel
    0.8% 4089/OplusWifiCPUThr: 0.8% user + 0% kernel
    0.8% 4114/OplusNetworkSta: 0.8% user + 0% kernel
    0.8% 4205/athena_killer: 0% user + 0.8% kernel
    0.8% 4224/oSenseResHandle: 0% user + 0.8% kernel
    0.8% 4274/memFeatureT: 0.8% user + 0% kernel
    0.8% 4621/HansStateMachin: 0.8% user + 0.8% kernel
    0.8% 4636/CpuLimitManager: 0% user + 0.8% kernel
    0.8% 6546/OwmIcmpMonitor: 0% user + 0.8% kernel
      77% 183/kswapd0:0: 0% user + 77% kernel
      113% 6113/com.google.android.providers.media.module: 38% user + 75% kernel / faults: 449 minor 31 major
    13% 13445/Thread-8: 6.8% user + 6.8% kernel
    12% 18569/Thread-13: 5.4% user + 6.8% kernel
    10% 6667/Thread-3: 2.7% user + 8.2% kernel
    10% 7042/Thread-12: 5.4% user + 5.4% kernel
    10% 20490/Thread-19: 2.7% user + 8.2% kernel
    10% 32141/Thread-9: 2.7% user + 8.2% kernel
    9.5% 4497/Thread-20: 4.1% user + 5.4% kernel
    9.5% 6670/Thread-4: 1.3% user + 8.2% kernel
    9.5% 9183/Thread-5: 4.1% user + 5.4% kernel
    9.5% 13140/Thread-7: 2.7% user + 6.8% kernel
    8.2% 20771/binder:6113_10: 1.3% user + 6.8% kernel
      102% 9948/in.games.balajimarket: 95% user + 6.3% kernel / faults: 1953 minor

修复方案

  • 实现分页懒加载:不要一次性传入100条数据,改为分页加载。比如首次加载20条,监听RecyclerView滚动事件,滑动到列表底部时,在子线程加载下一批数据,加载完成后调用adapter.notifyItemRangeInserted()更新列表,避免主线程一次性处理大量数据。
  • 优化Item布局与ViewHolder:确保Item布局层级扁平化,减少嵌套;在onBindViewHolder中禁止执行耗时操作(如同步加载图片、复杂计算),图片使用异步加载库,充分利用ViewHolder复用机制,避免重复创建View对象。
  • 数据处理移至子线程:数据解析、过滤、转换等操作全部放到子线程执行,可使用Coroutines、RxJava或AsyncTask等工具,处理完成后再通知主线程更新Adapter数据。
  • 禁止主线程IO操作:如果数据来自本地数据库、文件或SharedPreferences,必须放到子线程执行,IO操作是ANR的高频触发点。
  • 优化内存占用:通过Android Studio Profiler排查内存泄漏或过度占用问题,比如Adapter中改用Application Context避免持有Activity强引用,及时回收无用对象,减少频繁GC导致的主线程阻塞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 20:00:14