Android ActivityControlSurface attachToActivity 签名变更
摘要
#一个新的 ActivityControlSurface
方法
void attachToActivity(
@NonNull ExclusiveAppComponent<Activity> exclusiveActivity,
@NonNull Lifecycle lifecycle);
正在替换现已弃用的方法
void attachToActivity(@NonNull Activity activity, @NonNull Lifecycle lifecycle);
带有 Activity
参数的现有弃用方法已在 Flutter 2 中移除。
上下文
#为了使自定义 Activity 也可以提供 Flutter 插件使用 ActivityAware
接口所期望的 Activity
生命周期事件,FlutterEngine
公开了 getActivityControlSurface()
API。
这允许自定义 Activity 向引擎(与其具有 (0|1):1
关系)发出信号,表明它正在附加到或分离自引擎。
但是,之前的 API 存在一个缺陷,即它没有强制执行连接到引擎的 Activity 之间的互斥,从而允许 Activity 和引擎之间存在 n:1
关系,导致生命周期交叉干扰问题。
变更描述
#在 问题 #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
参考资料
#激励错误:问题 #66192—附加到 FlutterEngine 的非独占 UI 组件会导致事件交叉干扰
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面最后更新于 2024-04-04。 查看源代码 或 报告问题.