多会话架构

为了支持多个同时浏览会话,Focus 的架构已重构为严格分离会话(以及相关数据)与显示这些数据的 UI。

会话由全局的 SessionManager 实例管理。UI 组件显示 Session 对象持有的数据。

新的多会话架构利用了 Android 的 架构组件SessionManager 中的会话列表和 Session 内的数据作为 LiveData 对象返回。UI 组件可以观察这些 LiveData 对象的变化,并在需要时更新 UI 状态。

  • BrowserFragment 是显示浏览器 chrome 和网页内容的片段。BrowserFragment 始终连接到一个 Session (1:1)。

  • IWebView 是渲染网页内容的视图的通用接口。在运行时,它由 WebView 或 GeckoView 实现。状态更改将报告给实现 IWebView.Callback 的类。

  • 在多会话架构中,IWebView.CallbackSessionCallbackProxy 实现。此类的目的是更新此浏览会话的 Session 对象。目前,SessionCallbackProxy 仍将某些回调方法委托给 BrowserFragment。预计这将在后续的重构中最终删除。

  • BrowserFragment 显示 Session 对象持有的数据。定期更改的数据(例如 URL、进度等)表示为 LiveData 对象,并且可以被观察,以便在状态更改时更新 UI。

  • 通过为不同的 Session 对象显示新的 BrowserFragment 来切换会话。