【发布时间】:2021-11-02 08:45:35
【问题描述】:
在哪些其他情况下FlutterEngine 可用但Android Activity 不可用?例如,如果我在应用未运行时运行静态BroadcastReceiver,则肯定没有活动,但是有FlutterEngine吗?我需要知道 Flutter 在 Android 生命周期中的特点。我正在阅读 Flutter 团队的一篇文章 (Modern Flutter Plugin Development),其中提到
// You cannot access an Activity here because this // FlutterEngine is not necessarily displayed within an // Activity. See the ActivityAware interface for more info.
这在ActivityAware documentation 的onDetachedFromActivity 方法下得到了部分回答。
发生分离的原因有很多。
- 应用不再可见,Activity 实例已被销毁。
- 此插件连接的 FlutterEngine 已与其 FlutterView 分离。
- 此 ActivityAware 插件已从其 FlutterEngine 中删除。
但是,我希望它更深入。以下是我(不)深入了解的一些事情:
- 当根据 Android 活动生命周期销毁活动时,活动就消失了。 FlutterEngine 可能仍然存在,以防将来启动新活动。也许还有一个组件在 Android 应用程序中运行,例如一个服务,而 FlutterEngine 还没有被销毁? 我想知道在 Activity 被销毁时 FlutterEngine 没有被销毁的情况。
- FlutterView 可以detach from the engine,如果您从原生 Android 应用程序(也就是使用 add-to-app)添加/删除 Flutter,这可能会完成。您可能不必担心
FlutterView与FlutterEngine分离。 在正常的 Flutter 应用中,FlutterView与FlutterEngine分离的情况下,FlutterEngine:此 FlutterView 将清除其 UI 并停止将所有事件转发到之前附加的 FlutterEngine。这包括触摸事件、可访问性事件、键盘事件等。
- 相对简单的一种:如果插件从 FlutterEngine 注销,Flutter 通过调用该方法清理插件。您无需手动取消注册插件。您必须查明 Flutter 代表您注销插件的时间。 什么时候?
【问题讨论】: