Jar*_*ler 4 singleton firebase google-cloud-firestore
Firebase Firestore提供了getInstance()
一种方法,该方法可打开一个套接字(在执行该应用程序的任何时间仅一个套接字)并实例化Firestore客户端。
我想使用或不使用侦听器查询和存储数据(以获取实时更新等)。如果我getInstance
在需要查询或存储时立即调用,或者在我的应用启动时将该实例存储在静态类中,然后在需要查询或存储时立即使用此静态类属性:从技术上讲,这两种情况是相同。因为Google使用单例模式(getInstance()
)。
但是我错过了什么吗?将这个实例存储为静态类属性,并在需要时使用它,实际上安全吗?getInstance
在需要时打电话真的安全吗?更明确地说:在两次调用之间getInstance()
(或在两次访问静态class属性之间),即:在2个执行时间点之间,存在网络连接,套接字连接,实时侦听器(快照)连接松动的风险。 ?
如果是:如何处理这些问题?
我想使用和不使用侦听器来查询和存储数据(以获取实时更新等)。
如果不使用侦听器,则无法获取数据,甚至无法获取实时更新。Cloud Firestore中的所有内容都与侦听器有关。
如果我在应用启动时将此实例存储在静态类中,然后在需要查询或存储时立即使用此静态类属性
不要将Android上下文类放在静态字段中。对FirebaseFirestore的静态引用(其字段上下文指向Context)将导致内存泄漏。
静态字段将泄漏上下文。非静态内部类对其外部类具有隐式引用。如果该外部类例如是Fragment或Activity,则此引用意味着长时间运行的处理程序/加载器/任务将持有对该活动的引用,从而防止该活动获取垃圾。
因此,无需在需要时将其存储为静态变量调用getInstance()
。或者更方便的解决方案是使用依赖注入。匕首可以帮助您解决问题。
在需要时调用getInstance真的安全吗?
是的。
两次之间访问静态类属性),即:在两点执行时间之间,是否存在网络连接,套接字连接,实时侦听器(快照)连接松动的风险?
请参阅上面的说明。
归档时间: |
|
查看次数: |
509 次 |
最近记录: |