gpt4 book ai didi

java - 如何限制在Firestore中添加和删除监听器的数量?

转载 作者:太空宇宙 更新时间:2023-11-03 13:39:57 26 4
gpt4 key购买 nike

我正在创建测验应用程序。应用程序中的问题基于一些不断变化的值(value)观。所以我使用 addSnapshotListener() 来获取在数据库中所做的每个更改。 docs仍然是我应该删除监听器,这很好,但问题是在我的应用程序中,方向经常变化。这意味着我附加和删除监听器的次数太多了。这是一个不好的方法吗?如何解决?

最佳答案

Is this a bad approach?

不,不是!一旦不再需要监听器,您绝对应该将其删除。我假设您是在 onStart() 方法中添加监听器,并在 Activity 的 onStop() 方法中删除它,对吗?如果是这样,请注意这是正常行为,因为这两种方法都是 Activity 生命周期的一部分,并且每次方向改变时都会被调用。因此,每次发生重新定向时, Activity 都会被销毁并重新创建。请查看更多信息:

如果您想要一种更优雅的方式来移除监听器,您应该从这个 post 中看到我的答案的最后一部分。 。因此,您可以将 Activity 作为 addSnapshotListener() 中的第一个参数传递方法和监听器将自动为您删除。

编辑:

根据您的评论,您是对的。即使您正在使用该解决方案,附加和删除监听器的次数也是相同的。在这种情况下,我有一个可以减少这个数字的解决方案。

private boolean pending = false;
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
@Override
public void run() {
//Remove listener
pending = false;
}
};

@Override
protected void onStart() {
super.onStart();
if (pending) {
handler.removeCallbacks(runnable);
} else {
//Attach listener
}
pending = false;
}

@Override
protected void onStop() {
super.onStop();
handler.postDelayed(runnable, 3000);
pending = true;
}

这基本上意味着 Handler 将使用 Runnable 回调安排移除您的监听器,该回调将在调用 后三秒后实际执行移除>onStop()。我已将方向更改的延迟设置为三秒,但在现实世界的情况下,即使在旧手机上也通常要快得多。

因此,如果方向快于那三秒,我们只需删除回调并允许监听器继续监听。这显然意味着您减少了移除监听器的次数。

这也将非常有用,因为即使结果没有改变,也不会往返于 Firestore 后端以拉取数据的第二个往返行程。

关于java - 如何限制在Firestore中添加和删除监听器的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54594070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com