alibaba / alibaba/flutter_boost

[Bug]: Android 使用PlatformView加载原生播放器时,退入后台,再次进入,页面发生卡顿问题

Open
#2,020 11 comments 0 reactions 0 assignees View on GitHub
Android
Dominant language
Dart
Stars
7.2k
Forks
1.3k
PR merge metrics
No merged PRs in 30d

Description

### 请描述遇到的问题,以及您所期望的正确的结果

Android 使用PlatformView加载原生播放器时,退入后台,再次进入,Flutter页面发生卡顿问题。

### 请说明如何操作会遇到上述问题

这个bug修改 https://github.com/alibaba/flutter_boost/commit/019e0affc5e80d9f592f0399fe970b5047357215,再进入后台时,将isNeedHookFlutterDisplay通过反射修改false。
进入前台后 FlutterRenderer 以下代码逻辑不执行。
/**
* Adds a listener that is invoked whenever this {@code FlutterRenderer} starts and stops painting
* pixels to an Android {@code View} hierarchy.
*/
public void addIsDisplayingFlutterUiListener(@NonNull FlutterUiDisplayListener listener) {
flutterJNI.addIsDisplayingFlutterUiListener(listener);

**if (isDisplayingFlutterUi) {
listener.onFlutterUiDisplayed();
}**
}
图中标记的代码不会执行,产生问题

### 在下面填入关键复现代码

```
**FlutterBoostActivity**

protected void onPause() {
// ... 省略部分代码
setIsFlutterUiDisplayed(false)
}

private void setIsFlutterUiDisplayed(boolean isDisplayed) {
try {
FlutterRenderer flutterRenderer = this.getFlutterEngine().getRenderer();
Field isDisplayingFlutterUiField = FlutterRenderer.class.getDeclaredField("isDisplayingFlutterUi");
isDisplayingFlutterUiField.setAccessible(true);
isDisplayingFlutterUiField.setBoolean(flutterRenderer, false);

assert !flutterRenderer.isDisplayingFlutterUi();
} catch (Exception var4) {
Log.e("FlutterBoostActivity", "You *should* keep fields in io.flutter.embedding.engine.renderer.FlutterRenderer.");
var4.printStackTrace();
}

}

### 复现的平台

Android

### Flutter SDK版本

3.19.3

### FlutterBoost版本

5.0.1

### 是否延迟初始化FlutterBoost

No

### 解决方案

想了解如果再进入页面时候修改为isDisplayingFlutterUi = true的情况是否可行。

Contributor guide

No contributing guide indexed for this repository

Research direction

Start at FlutterBoostActivity.onPause and follow the FlutterRenderer.addIsDisplayingFlutterUiListener path in Flutter SDK 3.19.3, reproducing the Android background-to-foreground transition with PlatformView. Determine the lifecycle change needed so the Flutter page does not stall after returning, and verify the result with the reported reproduction steps.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, dart, flutter
Domain
mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.