当我一次又一次地请求Firebase时,存在性能问题。网格视图更新非常慢。因此,在这种情况下,我应该考虑将帖子的路径存储在数据库中。是个好主意还是存储在内部存储器中。(缓存)
private void setuptempGrid(View view){
setupImageGrid(ProfileActivity.images,view);
FirebaseDatabase.getInstance().getReference()
.child(getString(R.string.db_user_posts))
.child(application.getUser().getUserId()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot d:dataSnapshot.getChildren() ) {
FirebaseDatabase.getInstance().getReference()
.child(getString(R.string.db_posts)).child(getString(R.string.db_public))
.child(d.getKey()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
gridImageAdapter.add(dataSnapshot.getValue(Posts.class).getProfilePic());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
我有这段代码需要花费很多时间来获取图像,并且在创建片段时每次加载图像。
答案 0 :(得分:1)
使用Guava缓存,因为它们经过优化并且易于实现。在访问Firebase之前,请检查是否具有指定节点所需的数据。
答案 1 :(得分:1)
使用
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
访问到docs
通过启用持久性,即使用户或操作系统重新启动应用程序,Firebase Realtime Database客户端在联机时将同步的任何数据也将持久保存到磁盘,并且可以脱机使用。这意味着您的应用程序将通过使用存储在缓存中的本地数据来像在线操作一样工作。
也可以-
DatabaseReference db = FirebaseDatabase.getInstance().getReference()
.child(getString(R.string.db_user_posts))
.child(application.getUser().getUserId());
db.keepSynced(true);