当前位置: 首页 > 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.lryc.cn/news/624679.html

相关文章:

  • 安全存储之 SAES+HUK 使用技巧和常见问题 LAT1543
  • Rust 教程之简介000
  • CSS:水平垂直居中
  • 【银河麒麟桌面系统】配置匿名文件夹与用户认证共享服务
  • 2025年秋招Java后端面试场景题+八股文题目
  • AI 推荐系统云端部署实战:基于亚马逊云科技免费资源的工程实现
  • 从财务整合到患者管理:德国医疗集团 Asklepios完成 SAP S/4HANA 全链条升级路径
  • CAN总线的安全性
  • Linux小白加油站,第三周周考
  • 世界模型之自动驾驶
  • 想找出版社出书?这样选就对了!
  • 《P1195 口袋的天空》
  • OVS:ovn是如何支持组播的?
  • GPT-5之后:当大模型更新不再是唯一焦点
  • 多硬盘构建lvm存储
  • GPT-5博士级AI使用教程及国内平替方案
  • 基于SpringBoot+Uniapp的互联网订餐小程序(协同过滤算法、Echarts图形化分析)
  • “Let it Crash“:分布式系统设计的涅槃重生哲学
  • 【笔记】位错的定义和分类
  • 【2025CVPR-目标检测方向】学习稳健且硬件自适应的对象检测器,以应对边缘设备的延迟攻击
  • Image-to-Music API 接入文档(图片生成音乐)
  • 综合布线系统的网络分线箱计量-文字查找精准定位
  • 区块链技术原理(16)-以太坊节点与客户端
  • 从0-1使用Fastmcp开发一个MCP服务,并部署到阿里云百炼 -持续更新中
  • 深入理解浏览器渲染机制:重排(Reflow)与重绘(Repaint)
  • 深入剖析以太坊虚拟机(EVM):区块链世界的计算引擎
  • 【低空安全】低空安全简介
  • OCR库pytesseract安装保姆级教程
  • 【LLM1】大型语言模型的基本生成机制
  • 特种行业许可证识别技术:通过图像处理、OCR和结构化提取,实现高效、准确的许可证核验与管理