Tencent / libpag

The official rendering library for PAG (Portable Animated Graphics) files that renders After Effects animations natively across multiple platforms.
https://pag.io
Other
4.97k stars 453 forks source link

android使用libpag时Java_org_libpag_PAGAnimator_setSync低概率出现ANR #2317

Open 15629199786 opened 4 months ago

15629199786 commented 4 months ago

【版本信息】

4.3.8

【平台信息】

Android 原生

【预期的表现】

pag动画资源,依赖的pag库内部不会发生了ANR

【实际的情况】

pag动画资源,依赖的pag库内部发生了ANR

【Demo及附件】

"main" prio=5 tid=1 Native

group="main" sCount=1 dsCount=0 flags=1 obj=0x72bdd508 self=0xb400e1c2f7a437b0 sysTid=2113 nice=-20 cgrp=default sched=1073741825/1 handle=0xe1c41e3794f8 state=S schedstat=( 18190784541 320796713 63662 ) utm=1409 stm=409 core=1 HZ=100 stack=0xffffc5394000-0xffffc5396000 stackSize=8192KB held mutexes= native: #00 pc 000000000004b34c /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28) native: #01 pc 000000000004ef34 /apex/com.android.runtime/lib64/bionic/libc.so (__futex_wait_ex(void volatile, bool, int, bool, timespec const)+144) native: #02 pc 00000000000af134 /apex/com.android.runtime/lib64/bionic/libc.so (pthread_cond_wait+60) native: #03 pc 0000000000222870 /system/priv-app/CustomSystemPlugin/lib/arm64/libpag.so (???) native: #04 pc 0000000000141614 /system/priv-app/CustomSystemPlugin/lib/arm64/libpag.so (???) native: #05 pc 0000000000099adc /system/priv-app/CustomSystemPlugin/lib/arm64/libpag.so (???) native: #06 pc 0000000000099aa8 /system/priv-app/CustomSystemPlugin/lib/arm64/libpag.so (???) native: #07 pc 0000000000100594 /system/priv-app/CustomSystemUIPlugin/lib/arm64/libpag.so (Java_org_libpag_PAGAnimator_setSync+84) at org.libpag.PAGAnimator.setSync(Native method) at org.libpag.PAGView.setSync(SourceFile:-1) at com.custom.systemplugin.qs.tileviewimpl.QSIconViewImpl.updateIcon(SourceFile:-1) at com.custom.systemplugin.qs.tileviewimpl.QSIconViewImpl.setIcon(SourceFile:-1) at com.custom.systemplugin.qs.tileviewimpl.QSTileViewDefault.handleStateChanged(SourceFile:-1) at com.custom.systemplugin.qs.QSTileView.lambda$onStateChanged$0(SourceFile:-1) at com.custom.systemplugin.qs.QSTileView.a(SourceFile:-1)

kevingpqi123 commented 4 months ago

这里需要调用 setSync 的原因是啥? 大部分情况下是不需要调用这个接口的,如果设置为 true,意味着所有的渲染都会在主线程执行,默认渲染是在子线程执行的,只有上屏才会切换到主线程

关于 ANR 的其它原因可以看下这个帖子的分析: https://github.com/Tencent/libpag/issues/2322