当前位置: 首页 > news >正文

低端设备加载webp ANR

先来看下这份ANR日志

suspend all histogram:	Sum: 476us 99% C.I. 7us-64us Avg: 28us Max: 64us
DALVIK THREADS (38):
"Signal Catcher" daemon prio=10 tid=6 Runnable| group="system" sCount=0 dsCount=0 flags=0 obj=0x133811a0 self=0xf2322400| sysTid=5754 nice=-20 cgrp=default sched=0/0 handle=0xdca551c0| state=R schedstat=( 38398213 739957 14 ) utm=2 stm=1 core=2 HZ=100| stack=0xdc95a000-0xdc95c000 stackSize=1008KB| held mutexes= "mutator lock"(shared held)native: #00 pc 00371015  /apex/com.android.art/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, BacktraceMap*, char const*, art::ArtMethod*, void*, bool)+76)native: #01 pc 0043fb87  /apex/com.android.art/lib/libart.so (art::Thread::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, bool, BacktraceMap*, bool) const+386)native: #02 pc 0043b553  /apex/com.android.art/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, bool, BacktraceMap*, bool) const+34)native: #03 pc 00458129  /apex/com.android.art/lib/libart.so (art::DumpCheckpoint::Run(art::Thread*)+664)native: #04 pc 00453703  /apex/com.android.art/lib/libart.so (art::ThreadList::RunCheckpoint(art::Closure*, art::Closure*)+354)native: #05 pc 00452c3b  /apex/com.android.art/lib/libart.so (art::ThreadList::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, bool)+1486)native: #06 pc 00452335  /apex/com.android.art/lib/libart.so (art::ThreadList::DumpForSigQuit(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)+604)native: #07 pc 0040adc7  /apex/com.android.art/lib/libart.so (art::Runtime::DumpForSigQuit(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)+130)native: #08 pc 0041a94b  /apex/com.android.art/lib/libart.so (art::SignalCatcher::HandleSigQuit()+1046)native: #09 pc 00419cef  /apex/com.android.art/lib/libart.so (art::SignalCatcher::Run(void*)+246)native: #10 pc 000aab73  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+40)native: #11 pc 00063fe3  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+30)(no managed stack frames)"main" prio=5 tid=1 Native| group="main" sCount=1 dsCount=0 flags=1 obj=0x7235aa78 self=0xf231de00| sysTid=5744 nice=-10 cgrp=default sched=0/0 handle=0xf26f1470| state=R schedstat=( 1084080374 75387661 399 ) utm=97 stm=11 core=1 HZ=100| stack=0xfeff2000-0xfeff4000 stackSize=8192KB| held mutexes=native: #00 pc 005359f4  /system/lib/libhwui.so (WebPRescalerImport+240)native: #01 pc 005060f0  /system/lib/libhwui.so (EmitRescaledRGB+116)native: #02 pc 00504e04  /system/lib/libhwui.so (CustomPut.llvm.16658038581547897248+52)native: #03 pc 00503ff0  /system/lib/libhwui.so (FinishRow.llvm.13521785089726402735+2040)native: #04 pc 00501c78  /system/lib/libhwui.so (IDecode+1124)native: #05 pc 00173f75  /system/lib/libhwui.so (SkWebpCodec::onGetPixels(SkImageInfo const&, void*, unsigned int, SkCodec::Options const&, int*)+1680)native: #06 pc 001695cf  /system/lib/libhwui.so (SkCodec::getPixels(SkImageInfo const&, void*, unsigned int, SkCodec::Options const*)+250)native: #07 pc 001663b7  /system/lib/libhwui.so (SkAndroidCodecAdapter::onGetAndroidPixels(SkImageInfo const&, void*, unsigned int, SkAndroidCodec::AndroidOptions const&)+42)native: #08 pc 0016606f  /system/lib/libhwui.so (SkAndroidCodec::getAndroidPixels(SkImageInfo const&, void*, unsigned int, SkAndroidCodec::AndroidOptions const*)+590)native: #09 pc 00119935  /system/lib/libhwui.so (android::ImageDecoder::decode(void*, unsigned int)+264)native: #10 pc 00104279  /system/lib/libhwui.so (ImageDecoder_nDecodeBitmap(_JNIEnv*, _jobject*, long long, _jobject*, unsigned char, int, int, _jobject*, unsigned char, int, unsigned char, unsigned char, unsigned char, long long, unsigned char)+824)at android.graphics.ImageDecoder.nDecodeBitmap(Native method)at android.graphics.ImageDecoder.decodeBitmapInternal(ImageDecoder.java:1712)at android.graphics.ImageDecoder.decodeDrawableImpl(ImageDecoder.java:1795)at android.graphics.ImageDecoder.decodeDrawable(ImageDecoder.java:1751)at android.content.res.ResourcesImpl.decodeImageDrawable(ResourcesImpl.java:808)at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:883)at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:673)at android.content.res.Resources.loadDrawable(Resources.java:993)at android.content.res.Resources.getDrawableForDensity(Resources.java:983)at android.content.res.Resources.getDrawable(Resources.java:922)at android.content.Context.getDrawable(Context.java:693)at androidx.core.content.ContextCompat$Api21Impl.getDrawable(ContextCompat.java:1049)at androidx.core.content.ContextCompat.getDrawable(ContextCompat.java:485)at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:147)- locked <0x028cc8e3> (a androidx.appcompat.widget.ResourceManagerInternal)at androidx.appcompat.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:475)- locked <0x0db8e2e0> (a androidx.appcompat.widget.AppCompatDrawableManager)at androidx.appcompat.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:93)at androidx.appcompat.app.AppCompatDelegateImpl.attachToWindow(AppCompatDelegateImpl.java:848)at androidx.appcompat.app.AppCompatDelegateImpl.ensureWindow(AppCompatDelegateImpl.java:824)at androidx.appcompat.app.AppCompatDelegateImpl.onCreate(AppCompatDelegateImpl.java:531)at androidx.appcompat.app.AppCompatActivity$2.onContextAvailable(AppCompatActivity.java:133)at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.kt:84)at androidx.activity.ComponentActivity.onCreate(ComponentActivity.kt:331)at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:216)at com.healthfitness.common.base.BaseActivity.onCreate(BaseActivity.kt:22)at com.healthfitness.xxxx.WelcomeActivity.onCreate(WelcomeActivity.kt:37)at android.app.Activity.performCreate(Activity.java:8022)at android.app.Activity.performCreate(Activity.java:8006)at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3404)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)at android.os.Handler.dispatchMessage(Handler.java:106)at android.os.Looper.loop(Looper.java:223)at android.app.ActivityThread.main(ActivityThread.java:7664)at java.lang.reflect.Method.invoke(Native method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

主要是在欢迎页加载了一个图片,造成了Anr,查看后发现这个图片是

57.47KB,尺寸为 (5760x3240) 的一张webp的图片,

这个图片大小虽然不大,但是尺寸,其实远超设备需求的,所以考虑将图片优化后再观察ANR概率。

在 Windows 环境下优化 WebP 图片,可以使用以下工具和方法:

推荐工具及使用步骤

1. 使用 Google 官方工具包 (推荐)

下载地址
https://developers.google.com/speed/webp/docs/precompiled

使用方法

  1. 下载并解压 libwebp-{version}-windows-x64.zip

  2. 打开命令提示符(CMD)进入解压目录的 bin 文件夹

  3. 执行优化命令:

cmd

cwebp -q 75 -m 6 -resize 2160 3840 "D:\原图路径\large.webp" -o "D:\输出路径\optimized.webp"

参数详解

  • -q 75:设置质量级别(0-100,75是视觉无损的推荐值)

  • -m 6:压缩级别(0-6,6为最高压缩)

  • -resize 2160 3840:调整尺寸(保持宽高比)

  • -af:启用自动滤镜(智能降噪)

  • -f 80:滤镜强度(0-100,80为推荐值)

  • -sharpness 1:锐化程度(0-7,补偿压缩导致的模糊)

E:\tools\webptools\libwebp-1.6.0-windows-x64\libwebp-1.6.0-windows-x64\bin> .\cwebp.exe -q 75 -resize 2880 1620 .\webp\splash_bg.webp -o .\webp\splash_bg2.webp
Saving file '.\webp\splash_bg2.webp'
File:      .\webp\splash_bg.webp
Dimension: 2880 x 1620
Output:    19834 bytes Y-U-V-All-PSNR 56.13 57.17 55.99   56.26 dB(0.03 bpp)
block count:  intra4:        390  (2.12%)intra16:     17970  (97.88%)skipped:     17783  (96.86%)
bytes used:  header:            258  (1.3%)mode-partition:   9412  (47.5%)Residuals bytes  |segment 1|segment 2|segment 3|segment 4|  totalmacroblocks:  |       0%|       1%|       2%|      97%|   18360quantizer:  |      36 |      36 |      33 |      25 |filter level:  |      11 |      31 |      28 |       4 |
PS E:\tools\webptools\libwebp-1.6.0-windows-x64\libwebp-1.6.0-windows-x64\bin>

替换优化图,显示效果也没有差别

http://www.dtcms.com/a/337734.html

相关文章:

  • JavaScript 常用事件总结汇总
  • 前端css学习笔记7:各种居中布局空白问题
  • Ethan独立开发新品速递 | 2025-08-18
  • 开发避坑指南(28):Spring Boot端点检查禁用失效解决方案
  • 【Linux操作系统】简学深悟启示录:进程状态优先级
  • 遨游三防科普|三防平板是指哪三防?应用在什么场景?
  • linux对外提供snmp服务
  • Pytest项目_day18(读取ini文件)
  • Spring Boot 实用小技巧:多级缓存(Caffeine + Redis)- 第545篇
  • 如何解决机器翻译的“幻觉“问题(Hallucination)?
  • 当AI学会“思考”:大语言模型背后的智能本质与伦理边界
  • 【提示词技巧】通用提示词原则介绍
  • Linux学习-软件编程(进程间通信1)
  • ROS 2 中用于建图的一些 topic
  • PyTorch神经网络工具箱(优化器)
  • buuctf:护网杯_2018_gettingstart、oneshot_tjctf_2016
  • llamafactory使用qlora训练
  • VectorDB+FastGPT一站式构建:智能知识库与企业级对话系统实战
  • 使用LLaMA-Factory对大模型进行微调-详解
  • OSG+Qt —— 笔记2- Qt窗口绘制棋盘及模型周期运动(附源码)
  • linux:告别SSH断线烦恼,Screen命令核心使用指南
  • 第四章:大模型(LLM)】07.Prompt工程-(1)Prompt 原理与基本结构
  • 大数据分析-读取文本文件内容进行词云图展示
  • Zephyr 中的 bt_le_per_adv_set_data 函数的介绍和应用方法
  • [机器学习]09-基于四种近邻算法的鸢尾花数据集分类
  • 具身智能赋能轮椅机器人的认知革命与人机共生新范式
  • 【软考架构】第4章 信息安全的抗攻击技术
  • 从「行走」到「思考」:机器人进化之路与感知—决策链路的工程化实践
  • 微电网管控系统中python多线程缓存与SQLite多数据库文件连接池实践总结(含源码)
  • 安川YASKAWA焊接机器人保护气智能节气阀