s***@163.com
s***@163.com
  • 发布:2023-02-09 11:31
  • 更新:2024-04-21 23:05
  • 阅读:903

【报Bug】uniapp重新渲染video时,内存会一直上涨,直至闪退【android】【app-vue】

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10专业版1903

HBuilderX类型: 正式

HBuilderX版本号: 3.5.3

手机系统: Android

手机系统版本号: Android 6.0

手机厂商: hikvision

手机机型: DS-KH9310

页面类型: vue

vue版本: vue2

打包方式: 离线

项目创建方式: HBuilderX

操作步骤:

关键代码:

mounted() {  
      this.play()  
    },  
    methods: {  
      play() {  
        this.sourceUrl = 'http://10.184.49.8:9000/ipublish.bucket/5E25BEFB-BA8B-4007-8041-592453F0F5FF.avi'  
        setTimeout(() => {  
          this.sourceUrl = ''  
          this.$nextTick(() => {  
            this.play()  
          })  
        }, 10000)  
      }  
    }

预期结果:

预期能正常回收内存并维持在稳定水平,不会一直增长

实际结果:

内存占用规律性增长,直至闪退

bug描述:

项目场景是在屏幕上按照服务端提供的坐标渲染图片、文字、视频,所以整个项目就一个page,通过socket接收发布消息后下载文件,然后渲染到屏幕上,关键在于播放中会有刷新,比如播放一些内容60秒后,再播放另一些内容60秒,一直轮流播放。

切换的时候我通过v-if来更新vue的data,子组件(video、image)也都触发了beforeDestroy等钩子函数,但发现内存一直在增长。

为了验证,我重新创建一个空的新应用(附件:testuni.zip),页面打开后设置子组件(里面只有一个video)显示并播放,倒计时十秒后v-if清空子组件,然后又重新为v-if设置新的值,使得子组件重新创建并播放,使用android Profiler监测内存占用记录,截图如附件所示(video刷新测试内存检测.png),一会儿之后就闪退了,如附件截图所示(闪退截图.jpg)。设备那边给的限制是内存占用超过300MB,或者CPU占用超过30%,就杀掉进程,此处应该是内存超过300MB被杀掉了。

因为要做自动播放,所以不能用webview嵌入h5的方式来代替,生产环境BUG,万分焦急,还请官方大大帮忙看下,感谢。

logcat日志关键处如下:
02-09 11:16:45.921 380-397/system_process I/art: Background partial concurrent mark sweep GC freed 17526(1664KB) AllocSpace objects, 21(336KB) LOS objects, 19% free, 8MB/10MB, paused 4.401ms total 132.733ms
02-09 11:16:48.737 380-848/system_process I/MediaFocusControl: AudioFocus abandonAudioFocus() from android.media.AudioManager@3d48131e
02-09 11:16:48.993 380-675/system_process I/MediaFocusControl: AudioFocus requestAudioFocus() from android.media.AudioManager@3d48131e req=4flags=0x0
02-09 11:16:50.467 380-12020/system_process I/MediaFocusControl: AudioFocus requestAudioFocus() from android.media.AudioManager@3d48131e req=4flags=0x0
02-09 11:16:50.477 380-11458/system_process I/MediaFocusControl: AudioFocus requestAudioFocus() from android.media.AudioManager@3d48131e req=4flags=0x0
02-09 11:16:59.303 380-15274/system_process I/MediaFocusControl: AudioFocus abandonAudioFocus() from android.media.AudioManager@3d48131e
02-09 11:16:59.677 380-12020/system_process I/MediaFocusControl: AudioFocus requestAudioFocus() from android.media.AudioManager@3d48131e req=4flags=0x0
02-09 11:17:01.591 380-11458/system_process I/MediaFocusControl: AudioFocus requestAudioFocus() from android.media.AudioManager@3d48131e req=4flags=0x0
02-09 11:17:01.597 380-429/system_process I/MediaFocusControl: AudioFocus requestAudioFocus() from android.media.AudioManager@3d48131e req=4flags=0x0
02-09 11:17:05.393 380-581/system_process E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=438.01 rxSuccessRate=653.55 targetRoamBSSID=a0:69:d9:cf:7d:90 RSSI=-56
02-09 11:17:05.393 380-581/system_process E/WifiStateMachine: startDelayedScan send -> 13079 milli 20000
02-09 11:17:05.393 380-581/system_process E/WifiStateMachine: WifiStateMachine CMD_START_SCAN with age=1380311 interval=101250 maxinterval=300000
02-09 11:17:05.394 380-581/system_process E/WifiStateMachine: WifiStateMachine CMD_START_SCAN try full band scan age=1380311 interval=101250 maxinterval=300000
02-09 11:17:05.394 380-581/system_process E/WifiStateMachine: WifiStateMachine CMD_START_SCAN prevent full band scan due to pkt rate
02-09 11:17:05.394 380-581/system_process E/WifiStateMachine: WifiStateMachine CMD_START_SCAN source -2 ...and ignore scans tx=438.01 rx=653.55
02-09 11:17:09.851 380-12020/system_process I/MediaFocusControl: AudioFocus abandonAudioFocus() from android.media.AudioManager@3d48131e
02-09 11:17:10.152 380-675/system_process I/MediaFocusControl: AudioFocus requestAudioFocus() from android.media.AudioManager@3d48131e req=4flags=0x0
02-09 11:17:11.939 380-32199/system_process I/MediaFocusControl: AudioFocus requestAudioFocus() from android.media.AudioManager@3d48131e req=4flags=0x0
02-09 11:17:11.947 380-23468/system_process I/MediaFocusControl: AudioFocus requestAudioFocus() from android.media.AudioManager@3d48131e req=4flags=0x0
02-09 11:17:19.033 380-444/system_process D/process_monitor: state : pid: 23855 cpu: 22 memory: 318 storage: 121 name : io.dcloud.HBuilder
02-09 11:17:19.118 380-445/system_process D/AppWarningDialog: killApps ProcessRecord{3b3ab16e 23855:io.dcloud.HBuilder/u0a87}
02-09 11:17:19.119 380-445/system_process W/ActivityManagerService: Force finishing activity 1 io.dcloud.HBuilder/io.dcloud.PandoraEntryActivity
02-09 11:17:19.122 380-445/system_process D/ActivityManagerService: moveHomeStackTaskToTop: moving TaskRecord{698988b #103 A=com.hik.vis.indoor U=0 sz=1}
02-09 11:17:19.155 380-445/system_process D/WindowManagerService: null ==========setInputFocusLw ========== =======
02-09 11:17:19.160 380-445/system_process D/DisplayManager: getDisplayInfo: displayId=0, info=DisplayInfo{"内置屏幕", uniqueId "local:0", app 1024 x 552, real 1024 x 600, largest app 1024 x 941, smallest app 600 x 517, 57.481 fps, supportedRefreshRates [57.481], rotation 0, density 160 (159.5681 x 160.42105) dpi, layerStack 0, appVsyncOff 0, presDeadline 18397053, type BUILT_IN, state ON, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS}
02-09 11:17:19.245 380-445/system_process I/ActivityManagerService: Killing 23855:io.dcloud.HBuilder/u0a87 (adj 0): user request after error
02-09 11:17:19.468 380-445/system_process E/libprocessgroup: failed to kill 1 processes for processgroup 23855
02-09 11:17:19.471 380-445/system_process D/DisplayManager: getDisplayInfo: displayId=0, info=DisplayInfo{"内置屏幕", uniqueId "local:0", app 1024 x 552, real 1024 x 600, largest app 1024 x 941, smallest app 600 x 517, 57.481 fps, supportedRefreshRates [57.481], rotation 0, density 160 (159.5681 x 160.42105) dpi, layerStack 0, appVsyncOff 0, presDeadline 18397053, type BUILT_IN, state ON, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS}
02-09 11:17:19.471 380-445/system_process D/PhoneWindow: DecorView - SCREEN_WEITH = 1024 - SCREE_HEIGHT = 552
02-09 11:17:19.477 380-925/system_process W/MediaFocusControl: AudioFocus audio focus client died
02-09 11:17:19.477 380-925/system_process I/MediaFocusControl: AudioFocus removeFocusStackEntry(): removing entry for android.os.BinderProxy@19854d75
02-09 11:17:19.480 380-582/system_process D/WifiService: Client connection lost with reason: 4
02-09 11:17:19.490 380-570/system_process W/InputDispatcher: channel '26335f37 io.dcloud.HBuilder/io.dcloud.PandoraEntryActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
02-09 11:17:19.490 380-570/system_process E/InputDispatcher: channel '26335f37 io.dcloud.HBuilder/io.dcloud.PandoraEntryActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
02-09 11:17:19.507 380-925/system_process I/WindowState: WIN DEATH: Window{26335f37 u0 io.dcloud.HBuilder/io.dcloud.PandoraEntryActivity}
02-09 11:17:19.507 380-925/system_process W/InputDispatcher: Attempted to unregister already unregistered input channel '26335f37 io.dcloud.HBuilder/io.dcloud.PandoraEntryActivity (server)'
02-09 11:17:19.526 380-445/system_process D/DisplayManager: getDisplayInfo: displayId=0, info=DisplayInfo{"内置屏幕", uniqueId "local:0", app 1024 x 552, real 1024 x 600, largest app 1024 x 941, smallest app 600 x 517, 57.481 fps, supportedRefreshRates [57.481], rotation 0, density 160 (159.5681 x 160.42105) dpi, layerStack 0, appVsyncOff 0, presDeadline 18397053, type BUILT_IN, state ON, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS}
02-09 11:17:19.536 380-445/system_process D/WindowManagerService: Window{9eb7762 u0 Application Usage Status} ==========setInputFocusLw ========== =======
02-09 11:17:19.540 380-23468/system_process W/art: Long monitor contention event with owner method=void com.android.server.am.ActivityManagerService$MainHandler.handleMessage(android.os.Message) from ActivityManagerService.java:1430 waiters=2 for 395ms
02-09 11:17:19.541 380-675/system_process W/art: Long monitor contention event with owner method=void com.android.server.am.ActivityManagerService$MainHandler.handleMessage(android.os.Message) from ActivityManagerService.java:1430 waiters=1 for 455ms
02-09 11:17:19.542 380-12020/system_process W/art: Long monitor contention event with owner method=void com.android.server.am.ActivityManagerService$MainHandler.handleMessage(android.os.Message) from ActivityManagerService.java:1430 waiters=3 for 305ms
02-09 11:17:19.544 380-11458/system_process W/art: Long monitor contention event with owner method=void com.android.server.am.ActivityManagerService$MainHandler.handleMessage(android.os.Message) from ActivityManagerService.java:1430 waiters=0 for 460ms
02-09 11:17:19.561 380-445/system_process D/ViewRootImpl: onAttachToWindow register content observer attrs=WM.LayoutParams{(0,0)(wrapxwrap)mPosX=0mPosY=0mHScale=1.0mVScale=1.0 align=UNDEFINE taskId=-1 gr=#ffffffff sim=#120 ty=2010 fl=#1860002 pfl=0x110 fmt=-3 wanim=0x103046a surfaceInsets=Rect(32, 32 - 32, 32) needsMenuKey=2packageName=androidtoken=null}
02-09 11:17:19.678 380-445/system_process D/ViewRootImpl: 563<<<<<< BACK FROM relayoutWM.LayoutParams{(0,0)(wrapxwrap)mPosX=0mPosY=0mHScale=1.0mVScale=1.0 align=UNDEFINE taskId=-1 gr=#ffffffff sim=#120 ty=2010 fl=#1860002 pfl=0x110 fmt=-3 wanim=0x103046a surfaceInsets=Rect(32, 32 - 32, 32) needsMenuKey=2packageName=androidtoken=null}
02-09 11:17:19.747 380-445/system_process D/ViewRootImpl: 580<<<<<< BACK FROM relayoutnull
02-09 11:17:19.805 380-445/system_process D/ViewRootImpl: 580<<<<<< BACK FROM relayoutnull

2023-02-09 11:31 负责人:无 分享
已邀请:
亦春亦秋

亦春亦秋 - 用爱发电

试一下使用v-show 并停止视频播放。
然后广告结束后,更换视频链接。这样饶过去。

可能是v-if 多次渲染,并且内存未释放,所以不断增加。

或者在v-if隐藏时,销毁video

  • s***@163.com (作者)

    感谢,之前尝试过,也没用,我就算只放一个video,不执行其他任何操作,都会退出,因为我这边的设备不像手机这么好,性能很差的

    2023-05-31 20:02

9***@qq.com

9***@qq.com

大佬这个问题解决了吗,遇到了类似的场景和情况

  • s***@163.com (作者)

    没有解决,换方案了,业务不是很复杂,换了原生开发

    2023-05-31 20:00

5***@qq.com

5***@qq.com

我也遇到类似问题了,大佬们解决了吗?

要回复问题请先登录注册