多会话架构¶
为了支持多个同时浏览会话,Focus 的架构已重构为严格分离会话(以及相关数据)与显示这些数据的 UI。
会话由全局的 SessionManager
实例管理。UI 组件显示 Session
对象持有的数据。
新的多会话架构利用了 Android 的 架构组件。 SessionManager
中的会话列表和 Session
内的数据作为 LiveData 对象返回。UI 组件可以观察这些 LiveData 对象的变化,并在需要时更新 UI 状态。
BrowserFragment 是显示浏览器 chrome 和网页内容的片段。BrowserFragment 始终连接到一个 Session (1:1)。
IWebView 是渲染网页内容的视图的通用接口。在运行时,它由 WebView 或 GeckoView 实现。状态更改将报告给实现 IWebView.Callback 的类。
在多会话架构中,IWebView.Callback 由 SessionCallbackProxy 实现。此类的目的是更新此浏览会话的 Session 对象。目前,SessionCallbackProxy 仍将某些回调方法委托给 BrowserFragment。预计这将在后续的重构中最终删除。
BrowserFragment 显示 Session 对象持有的数据。定期更改的数据(例如 URL、进度等)表示为 LiveData 对象,并且可以被观察,以便在状态更改时更新 UI。
通过为不同的 Session 对象显示新的 BrowserFragment 来切换会话。