alibaba / alibaba/flutter_boost

[featurePR]修复Android在FlutterBoost.getInstance().currentActivity 在引擎懒加载打开页面时存在为null情况

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

Description

**问题描述:**
FlutterBoost.getInstance().currentActivity 在引擎懒加载打开页面时存在为null情况,导致Flutter页面点击跳转无反应.

**问题出现原因:**
FlutterBoost.getInstance().currentActivity依赖于引擎初始化时注册Application的BoostActivityLifecycle监听,由于是引擎懒加载初始化,此时当前含有Flutter的Activity已经走完了onCreate,onResume生命周期(比如Activity Tab嵌套FlutterFragment形式),Application的BoostActivityLifecycle监听晚于注册,导致topActivity并没有记录当前Activity, 所以topActivity为null.

**解决方案:**
可以做个补偿,如果FlutterBoost.getInstance().currentActivity,再通过FlutterContainerManager获取topContainer,再通过topContainer获取当前的context activity即可。

**修复code:**
```
public Activity currentActivity() {
if (topActivity != null) {
return topActivity;
}
FlutterViewContainer topActivityContainer = FlutterContainerManager.instance().getTopActivityContainer();
if (topActivityContainer != null) {
return topActivityContainer.getContextActivity();
}

FlutterViewContainer topContainer = FlutterContainerManager.instance().getTopContainer();
if (topContainer != null) {
return topContainer.getContextActivity();
}
return topActivity;
}
```

Contributor guide

No contributing guide indexed for this repository

Research direction

Start at FlutterBoost.getInstance().currentActivity() and trace FlutterContainerManager.instance(), including getTopActivityContainer() and getTopContainer(). Confirm the lazy-engine case where topActivity is null, then verify that the method returns the current context Activity from the available top container and preserves the existing fallback behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, java
Domain
mobile
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.