Android ActivityControlSurface attachToActivity 签名变更
概述
#一个新的 ActivityControlSurface
方法
void attachToActivity(
@NonNull ExclusiveAppComponent<Activity> exclusiveActivity,
@NonNull Lifecycle lifecycle);
正在取代目前已废弃的方法
void attachToActivity(@NonNull Activity activity, @NonNull Lifecycle lifecycle);
带有 Activity
参数的现有废弃方法已在 Flutter 2 中移除。
背景
#为了让自定义 Activities 也能使用 ActivityAware
接口提供 Flutter 插件所预期的 Activity
生命周期事件,FlutterEngine
暴露了一个 getActivityControlSurface()
API。
这允许自定义 Activities 向引擎(与其存在 (0|1):1
的关系)发出信号,表明其正在从引擎附加或分离。
然而,之前的 API 存在缺陷,它没有强制连接到引擎的 Activity 之间进行排他性,从而导致 Activity 与引擎之间出现 n:1
关系,并引发生命周期交叉通信问题。
变更说明
#在 Issue #21272 之后,您不再需要使用以下 API 将您的 activity 附加到 FlutterEngine
:
void attachToActivity(@NonNull Activity activity, @NonNull Lifecycle lifecycle);
API(现已废弃),而是使用
void attachToActivity(
@NonNull ExclusiveAppComponent<Activity> exclusiveActivity,
@NonNull Lifecycle lifecycle);
现在期望使用 ExclusiveAppComponent<Activity>
接口而不是 Activity
。当您的独占 Activity 被附加到 FlutterEngine
的另一个 Activity 替换时,ExclusiveAppComponent<Activity>
会提供一个回调。
void detachFromActivity();
API 保持不变,当您的自定义 Activity 自然销毁时,您仍需调用它。
迁移指南
#如果您有自己的 activity 持有 FlutterView
,请将对以下方法的调用替换为
void attachToActivity(@NonNull Activity activity, @NonNull Lifecycle lifecycle);
对以下方法的调用:
void attachToActivity(
@NonNull ExclusiveAppComponent<Activity> exclusiveActivity,
@NonNull Lifecycle lifecycle);
在您通过调用 FlutterEngine
上的 getActivityControlSurface()
获取的 ActivityControlSurface
上进行调用。
使用 ExclusiveAppComponent<Activity>
包装您的 Activity 并实现回调方法
void detachFromFlutterEngine();
以处理您的 Activity 被附加到 FlutterEngine
的另一个 Activity 替换的情况。通常,您会执行与 Activity 自然销毁时相同的分离操作。
时间线
#版本发布:1.23.0-7.0.pre
稳定版本:2.0.0
参考资料
#相关错误:Issue #66192 — 连接到 FlutterEngine 的非独占 UI 组件导致事件交叉通信