luseweixiao / Android

0 stars 0 forks source link

jh android 项目的问题 #2

Open luseweixiao opened 1 year ago

luseweixiao commented 1 year ago

1、内存不断增长 有视频播放的情况:不断增长(native / others 部分不断增长)测试:从87 涨到 97,内存很大概率不会回收 无视频播放的情况: 删除视频播放,只放一个图片 测试:从 97 到 93 到 98 到 93 。内存会增长后又自动回收

工作计划: 1)搞清楚为什么播放视频时内存不断增长 写一个简单单个视频轮播页面,测试是否内存会不断增长 初始内存:94M 到 105 ,内存的确是在增长

为什么会增长??? 上一个视频播放完后,内存并不会完全释放??

2)如何避免视频的不断增长 通过 window.location.reload() 会释放一部分内存

每次播放完视频,将其src 赋值空后load后,再加载另一个视频数据 。 有一定效果,视频切换后会释放一些内存;但长时间的连续播放,内存仍然是在增长

3)如果不能避免,怎样释放这些内存

luseweixiao commented 1 year ago

2、进程间通信卡死,解决方案: 1)原来的方案是直接将进程杀死:会出现僵尸进程,而且重启进程也需要时间 2)只关闭activity,而不结束进程;在源进程中重新打开Activity,只释放Activity上的资源,这样不用重新创建进程。只有在返回键进行 两次点击时才结束进程,退出程序。

3、视频播放问题 1、卡顿 视频本身太大,或是帧率、码率太大,导致加载不过来;可以适当降低视频质量 2、解码库加载异常,无法播放 测试结果,现在的web视频要播放,必须要硬件加速,不然都播不出来的。 升级了webview 版本后,在开启硬件加速的情况下,还会出现解码库加载异常吗?

4、在内存释放,内存占用不高64~74M 间时,仍会出现 anr现象?? 还没有分析出来具体原因? 猜测: 1)cup突然占用过高,导致页面无法按时刷新??? 2)死锁??

luseweixiao commented 1 year ago
"main" prio=5 tid=1 Native
  | group="main" sCount=1 dsCount=0 obj=0x74ded000 self=0xb4cb6500
  | sysTid=7207 nice=-4 cgrp=default sched=0/0 handle=0xb6f0db34
  | state=S schedstat=( 167486071781 119649158027 398317 ) utm=13230 stm=3518 core=3 HZ=100
  | stack=0xbe0e7000-0xbe0e9000 stackSize=8MB
  | held mutexes=
  native: #00 pc 000175e8  /system/lib/libc.so (syscall+28)
  native: #01 pc 0003f6a3  /system/lib/libc.so (_ZL33__pthread_cond_timedwait_relativeP23pthread_cond_internal_tP15pthread_mutex_tPK8timespec+56)
  native: #02 pc 0001c2d7  /system/lib/libhwui.so (???)
  native: #03 pc 008bfb79  /data/dalvik-cache/arm/system@framework@boot.oat (Java_android_view_ThreadedRenderer_nSyncAndDrawFrame__J_3JI+124)
  at android.view.ThreadedRenderer.nSyncAndDrawFrame(Native method)
  at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:341)
  at android.view.ViewRootImpl.draw(ViewRootImpl.java:2620)
  at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2439)
  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2072)
  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1112)
  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6018)
  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
  at android.view.Choreographer.doCallbacks(Choreographer.java:670)
  at android.view.Choreographer.doFrame(Choreographer.java:606)
  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
  at android.os.Handler.handleCallback(Handler.java:739)
  at android.os.Handler.dispatchMessage(Handler.java:95)
  at android.os.Looper.loop(Looper.java:148)
  at android.app.ActivityThread.main(ActivityThread.java:5417)
  at java.lang.reflect.Method.invoke!(Native method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:746)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
luseweixiao commented 1 year ago

单独写了个测试demo

1、加载的新版本X5webview 2、单进程、硬件加速(软件加速无法播放视频)

关注的重点: 1、anr现象 2、不同设备会不会出现上面app一样的情况

测试机: 1、华为 多核cpu cpu并没有出现大的波动(50%)情况,一般都是8%~10% 内存在视频切换时,会释放,131M 134M 141M 146M 2、公司测试机 cpu 最高是在45%,大部分是在30%左右 内存:90M 98M 104M 112M anr: 报错内容和上面的一样

2022-10-08 11:58:25.323 2359-5391/com.jh.h5webapp E/ACodec: [OMX.rk.video_decoder.avc] storeMetaDataInBuffers failed w/ err -1010
2022-10-08 11:58:25.344 2359-5391/com.jh.h5webapp D/Surface: Surface::final mReqUsage=2900
2022-10-08 11:58:25.344 2359-5391/com.jh.h5webapp D/SurfaceUtils: set up nativeWindow 0xa2e93308 for 640x368, color 0x15, rotation 0, usage 0x2900
2022-10-08 11:58:35.531 2359-5398/com.jh.h5webapp I/OMXClient: Using client-side OMX mux.
2022-10-08 11:58:35.545 2359-5397/com.jh.h5webapp I/MediaCodec: [OMX.rk.video_decoder.avc] setting surface generation to 2415936
2022-10-08 11:58:35.547 2359-5398/com.jh.h5webapp E/ACodec: [OMX.rk.video_decoder.avc] storeMetaDataInBuffers failed w/ err -1010
2022-10-08 11:58:35.568 2359-5398/com.jh.h5webapp D/Surface: Surface::final mReqUsage=2900
2022-10-08 11:58:35.568 2359-5398/com.jh.h5webapp D/SurfaceUtils: set up nativeWindow 0xa2e93308 for 640x368, color 0x15, rotation 0, usage 0x2900
2022-10-08 11:59:10.110 2359-2364/com.jh.h5webapp I/art: Thread[2,tid=2364,WaitingInMainSignalCatcherLoop,Thread*=0xaf60b000,peer=0x12de70a0,"Signal Catcher"]: reacting to signal 3
2022-10-08 11:59:10.110 2359-2364/com.jh.h5webapp I/art: 
2022-10-08 11:59:16.806 2359-2364/com.jh.h5webapp W/libbacktrace: bool ThreadEntry::Wait(int): pthread_cond_timedwait for value 1 failed: Connection timed out
luseweixiao commented 1 year ago

阅读老版本代码

5.3 原生webview

1、webview是通过xml直接写到 布局文件中的 2、初始化填写的是服务器ip地址 3、有和web页面的心跳,10s中没收到页面心跳,webview会重新reload 4、ip存储在SharedPreferences 5、不支持双屏 6、并没有保活机制 7、与web的jsbridge接口中, 有一个startup方法,通过jni 调用native方法,设置系统时间(只适配了 rockchip PB02Pro) playAudio方法,传入url,通过MediaPlayer来播放语音

原生webview播放测试: 1、视屏切换有些问题,现在使用的loop死循环进行测试 2、cpu 9~12% 3、64M 内存很稳定 4、anr???运行一晚并没有anr??内存也没有增长

比较: 1、内存为什么比使用第三方内核要小? 为什么原生的内存不会显著增长?? 2、内存不会快速增长,cpu占用也低 3、为什么cpu低?原生的webview app线程数为51,而使用x5 webview 线程数为89 还有使用的webview 的apk是否有时特定cpu架构的,导致不同cpu架构加载时性能的差别??

luseweixiao commented 1 year ago

Rockchip X5内核 cpu

企业微信截图_16652165272528

Rockchip 原生webview cpu

企业微信截图_16652170531160