【发布时间】:2020-05-31 15:03:39
【问题描述】:
在我的 MainActivity 中,我启用了如下所示的 firebase 持久性,
// Imports **
private lateinit var mDatabase : FirebaseDatabase
val md = FirebaseDatabase.getInstance().setPersistenceEnabled(true)
class MainActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// bla bla
}
}
在初始化 MainActiviy 之后,我的 Activity2 开始销毁 MainActivity。在我的 Activity2 视图模型中,我正在初始化来自服务器的所有数据,如下所示,
class AppMainActivityViewModel(application: Application) : AndroidViewModel(application) {
lateinit var user_data_ref : DatabaseReference
lateinit var user_data_ref_lis : ValueEventListener
init {
user = FirebaseAuth.getInstance().currentUser?.uid!! }
fun updateDashboard(){
user_data_ref = FirebaseDatabase.getInstance().getReference("Users/$user")
user_data_ref_lis = user_data_ref.addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
}
override fun onDataChange(p0: DataSnapshot) {
userdata.value = p0.getValue(UserModel::class.java)
}
})
}
override fun onCleared() {
super.onCleared()
user_data_ref.removeEventListener(user_data_ref_lis)
}
}
如果我第一次使用互联网运行我的应用程序,我假设我的听众现在已经离线缓存数据,然后我退出我的应用程序然后在没有互联网的情况下打开,我在这里预计本地缓存的数据会立即触发 onData 更改,但我的惊喜 onData 更改从未被触发。然后我将我的代码更改为对我的 user_data_ref 保持同步,然后它在离线模式下运行良好。
每次用户打开应用程序时,都会下载一堆旧历史(大约 30 个参考,每个参考 100kb,一些旧历史永远不会改变)。这大大增加了我在一段时间内的带宽消耗,因为每次使用当前逻辑下载新文件时。我启用持久性的主要目标是减少带宽消耗。
以下是我现在遇到的一堆问题,
根据文档,ValueEvent 监听器应该足以缓存数据,为什么它在我的情况下不起作用?
在持续检查更新时,保持同步是否会增加我的带宽消耗?
即使我的活动被破坏,这是否会保持同步真实运行?
1234563下次会下载这 100 kb 还是只下载 1 kb?
【问题讨论】:
标签: kotlin firebase-realtime-database