Comments (10)
关于 ANR 问题:
1、首先要明确一个问题,不是所有的 pag 文件的性能都是一样的,如果遇到性能的问题,首先是排查素材,如果素材很复杂,首先去优化素材而不是其它的,如果素材很简单出现了卡顿,那才需要去排查是否是使用问题
业界没有可以兼容所有复杂素材的动效渲染方案,根本的解决办法就是分机型下发素材,不要期望复杂素材(含有 BMP 预合成的素材)可以在所有机型上没有卡顿问题
对于 pag sdk,可以这么理解,本来这些动效是自己需要代码实现的,性能本质上和动效的复杂度强相关,现在 pag sdk 将这些动效实现封装成了 SDK
2、使用层面,pag 内部已经做了多线程相关的处理,只有一个场景需要注意,避免播放的过程中去直接销毁,销毁的操作在主线程,但异步渲染需要主环境的 surface ,因此这里存在等待,需要注意的就是这一个点,这是使用中最普遍的问题
3、如果你们实现功能的时候很蹩脚或者耗费了很多精力,这种实现方案大概率都不是最优的,这种场景我们没有办法覆盖,只能说你们遇到了这类问题确定方案的时候最好事先咨询下
根据目前的对接情况:
问题1 占比 60%、问题2 占比 30%,问题3 占比 10%
如果不涉及全屏播放、文本编辑、占位图替换和实色图层修改颜色,PAGView 可以切换至 PAGImageView,PAGImageView 支持缓存渲染结果,可以大幅降低概率(但不能从根本解决,首次渲染的时候仍有可能出现)。
from libpag.
我们的产品线上也是大量的org.libpag.PAGAnimator.finalize() timed out after 10 seconds,但是线上pag资源多大上千个资源,而且海外机型也特别复杂,能否提供一个方案,解析pag资源遇到性能问题,能提供警告日志回调,业务方可以针对资源优化呢
from libpag.
看到您说的第二种情况, “只有一个场景需要注意,避免播放的过程中去直接销毁”,我看到我们业务有一种情况,我们的礼物数据是一个队列,播放完成后再获取一个新的资源,每次播放完都会设置重新设置pAGView.visibility = View.GONE,然后重新加载资源,特殊的点在于: pagviewListener的onAnimationCancel回调的时候,也重新获取下个资源同时设置 pAGView.visibility = View.GONE,再次加载, 这里的 onAnimationCancel是否就是异常情况,pAGView.visibility = View.GONE就是销毁的意思呢
from libpag.
我们的产品线上也是大量的org.libpag.PAGAnimator.finalize() timed out after 10 seconds,但是线上pag资源多大上千个资源,而且海外机型也特别复杂,能否提供一个方案,解析pag资源遇到性能问题,能提供警告日志回调,业务方可以针对资源优化呢
pag 官网上面的文档建议系统阅读下,可以避免很多问题,我们提供了桌面预览工具,可以定性去查看一些素材的性能:
https://pag.art/docs/profiler.html
如果桌面端预览性能栏有红色,在中低端机上大概率会出现卡顿
https://pag.art/docs/optimization.html
还有严格控制 BMP 预合成的数量,这些都是和性能强相关
from libpag.
看到您说的第二种情况, “只有一个场景需要注意,避免播放的过程中去直接销毁”,我看到我们业务有一种情况,我们的礼物数据是一个队列,播放完成后再获取一个新的资源,每次播放完都会设置重新设置pAGView.visibility = View.GONE,然后重新加载资源,特殊的点在于: pagviewListener的onAnimationCancel回调的时候,也重新获取下个资源同时设置 pAGView.visibility = View.GONE,再次加载, 这里的 onAnimationCancel是否就是异常情况,pAGView.visibility = View.GONE就是销毁的意思呢
如果是多个 pag 文件顺序播放,可以了解下 pag 的组合模式,自己创建一个 PAGComposition,然后将多个 pag 文件添加进来,通过 setStartTime 可以设置相对于主时间轴的开始时间,使用一个 PAGView 就可以实现你这边的需求,而且不需要你提到的那些设置,pag 支持多个原子素材的自由组合,具体用法可以参考下 pag 的官方 demo,性能肯定比你现在的方案要好很多
from libpag.
非常感谢回复
from libpag.
看到您说的第二种情况, “一个场景需要注意,避免播放但去销毁”,我们见到的业务都是这样。 情况是,我们的礼物数据是一个队列,播放完成后再获取一个新的资源,每次播放完都会设置重新设置pAGView.visibility = View.GONE,然后重新加载资源,特殊点在于: pagviewListener的onAnimationCancel函数的时候,也重新获取下一个资源同时设置 pAGView.visibility = View.GONE,再次加载, 这个onAnimationCancel是否就是异常情况,pAGView.visibility = View.GONE就是销毁
如果是多个 pag 文件顺序播放,可以了解下 pag 的组合模式,自己创建一个 PAGComposition,然后将多个 pag 文件添加进来,通过 setStartTime 可以设置相对于主时间轴的开始时间,使用一个 PAGView 就可以实现你这边需要的,而且不需要你提到的那些设置,pag 支持多个原子素材的自由组合,具体用法可以参考下 pag 的官方演示,性能肯定比你现在的方案要好很多
感谢回复,现在的业务逻辑太复杂了,礼物队列的维护逻辑太多了,变化太多了,您这个方案,改动起来风险太大了
from libpag.
@kevingpqi123 您好, 希望给提供其他方案或者定位问题,
- 大量的org.libpag.PAGAnimator.finalize() timed out after 10 seconds,但是线上pag资源多大上千个资源, 无法手动排除资源问题;
- 不能使用多个 PAGComposition,然后将多个 pag 文件添加进来,因为礼物具备优先级各种逻辑,不是顺序播放,
- pAGView.visibility = View.GONE是否就是销毁pagview呢
希望能提供一些建议,线上org.libpag.PAGAnimator.finalize() timed out after 10 seconds实在太多了
from libpag.
"避免播放的过程中去直接销毁",这个销毁指的是freeCache,还是removPAGView,亦或是其他什么呢
from libpag.
有没有其他方案可以解决这个问题呢
from libpag.
Related Issues (20)
- 中低端机上,多个PAGImageView同时加载同一个文件,会导致特效播放抽搐
- libpag.so和libffavc.so安全检测到so库高危漏洞风险
- 【Android兼容性问题】【版本:4.3.47】【机型:OPPO reno6 Android13】App冷启后动画闪烁
- 鸿蒙系统兼容 HOT 2
- 低概率 png 解码异常
- [split_config.arm64_v8a.apk] pag::PAGSurface::freeCache ANR HOT 4
- PAGImageView 同步下载由于持有锁导致的 watchdog 问题
- OC 与 C++ 混编导致 UTF8String 野指针崩溃
- org.libpag.PAGFile.replaceImage发生Native Crash
- org.libpag.PAGView.setComposition发生native Crash HOT 1
- org.libpag.PAGPlayer.setSurface发生native Crash
- RepeaterTransform:verify crash HOT 1
- 鸿蒙版pag的sdk大概什么时候有 HOT 2
- HarmonyOS NEXT 系统集成SDK后编译报错 HOT 3
- 鸿蒙NEXT系统pag闪退 HOT 9
- 【libpag-lite】iPhone15 ios17.0.3 safrai 无法播放 pag,无报错 HOT 1
- 鸿蒙demo 编译报错 HOT 1
- 鸿蒙版本退出页面如何销毁当前pagview 减少内存开销
- setPath返回NO,加载失败,偶现的 HOT 1
- PagFile.LoadAsync 调用jNI方法崩溃 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from libpag.