alibaba / alibaba/flutter_boost
[Bug]: 使用AndroidNativeView渲染视频,会出现卡住,无法渲染的情况
- Dominant language
- Dart
- Stars
- 7.2k
- Forks
- 1.3k
- PR merge metrics
- No merged PRs in 30d
Description
### 请描述遇到的问题,以及您所期望的正确的结果
使用`AndroidNativeView`进行视频渲染的界面,在从二级页回退回来时,出现渲染卡住的情况,刷屏报如下错误:
```
ImageReader dequeueBuffer: BufferQueue has been abandoned
```
### 请说明如何操作会遇到上述问题
_No response_
### 在下面填入关键复现代码
```
```
### 复现的平台
Android
### Flutter SDK版本
3.22.2
### FlutterBoost版本
5.0.2
### 是否延迟初始化FlutterBoost
No
### 解决方案
原因是`Flutter 3.22.2`版本开始,`FlutterActivityAndFragmentDelegate.java`文件的`onStop`方法中,新增了如下的代码
新增的`onTrimMemory`会使得导致渲染NativeView用的`PerImageReader`调用`close`。
这个`onStop`是绑定FlutterActivity的`onStop`触发的,因此在`FlutterBoost`的场景下,一级页面中有AndroidNativeView时,从二级页面返回时,因为先触发一级页面的`onResume`,后触发二级页面的`onStop`,就导致后面的`onStop`把一级页面渲染用的`PerImageReader`给`close`了,所以出现了问题。
临时解决方案:设置
``` java
FlutterRenderer.debugForceSurfaceProducerGlTextures = true;
```
这个会把NativeView的渲染从`ImageReaderSurfaceProducer`改回`SurfaceTextureSurfaceProducer`,相当于使用老版本的方案。
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with FlutterActivityAndFragmentDelegate.java and its onStop/onTrimMemory interaction, then trace how FlutterRenderer selects ImageReaderSurfaceProducer for AndroidNativeView. Reproduce navigation from a first-level page with a native video view to a second-level page and back on Flutter 3.22.2 with FlutterBoost 5.0.2. Done means the view continues rendering without the BufferQueue abandonment error, without requiring the debugForceSurfaceProducerGlTextures workaround.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, dart, java
- Domain
- mobile-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100