Android ActivityControlSurface attachToActivity 签名更改
摘要
#一个新的 ActivityControlSurface
方法:
void attachToActivity(
@NonNull ExclusiveAppComponent<Activity> exclusiveActivity,
@NonNull Lifecycle lifecycle);
正在替换现已弃用的方法:
void attachToActivity(@NonNull Activity activity, @NonNull Lifecycle lifecycle);
在 Flutter 2 中移除了使用 Activity
参数的现有已弃用方法。
背景
#为了让自定义 Activity 也能提供 Flutter 插件使用 ActivityAware
接口所期望的 Activity
生命周期事件,FlutterEngine
公开了 getActivityControlSurface()
API。
这允许自定义 Activity 向引擎(与其具有 (0|1):1
的关系)发出信号,表明它正在附加到或从引擎分离。
但是,之前的 API 存在一个缺陷,即它没有强制执行连接到引擎的 Activity 之间的互斥,从而允许 Activity 和引擎之间存在 n:1
的关系,导致生命周期交叉干扰问题。
变更说明
#在 Issue #21272之后,不要再使用以下方法将您的 Activity 附加到 FlutterEngine
:
void attachToActivity(@NonNull Activity activity, @NonNull Lifecycle lifecycle);
此 API 现已弃用,请改用:
void attachToActivity(
@NonNull ExclusiveAppComponent<Activity> exclusiveActivity,
@NonNull Lifecycle lifecycle);
现在需要 ExclusiveAppComponent<Activity>
接口而不是 Activity
。ExclusiveAppComponent<Activity>
在您的独占 Activity 被另一个附加到 FlutterEngine
的 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
上进行操作。
将您的 Activity 包装到 ExclusiveAppComponent<Activity>
中并实现回调方法:
void detachFromFlutterEngine();
以处理您的 Activity 被附加到 FlutterEngine
的另一个 Activity 替换的情况。通常,您需要执行与 Activity 被自然销毁时相同的分离操作。
时间线
#包含在版本中:1.23.0-7.0.pre
稳定版:2.0.0
参考
#促成错误: Issue #66192—附加到 FlutterEngine 的非独占 UI 组件导致事件交叉干扰
除非另有说明,否则本网站上的文档反映的是 Flutter 的最新稳定版本。页面最后更新于 2025-01-30。 查看源代码 或 报告问题。