使用Android处理Firebase引用的最佳方式

时间:2015-10-16 09:31:38

标签: java android optimization firebase

当您在Android应用中处理Firebase数据(读取,写入...)时,您需要获取firebase引用,然后才能处理数据。

由于Firebase参考是一个JSON树,如果你指向树根,你可以随时访问一个孩子,并不重要。

问题:从内存和延迟角度来看,在代码中处理此引用的最佳方法是什么?

    • C1
      • C10
      • C11
    • C2
      • C21

1 /在应用程序的根目录中创建一个静态Firebase引用。

MyApplication.getFirebaseRootRef().chid(C1).chid(C11).setValue(...); 

2 /为孩子C11创建一个新的firebase参考

Firebase ref = new Firebase("https://your.firebaseio.com/C1/C11");
ref..setValue(...);

3 / Hybrid

Firebase ref = new Firebase("https://your.firebaseio.com");
ref.child(C1).child(C11).setValue(...);

4 / Hybrid 2

Firebase ref = new Firebase("https://your.firebaseio.com").child(C1).child(C11);
ref.setValue(...);

性能有什么不同吗?

也许您可能对可读性和维护有一些建议?

3 个答案:

答案 0 :(得分:5)

Firebase查询和引用是轻量级对象。繁重的工作是由Firebase SDK本身内部(并由其管理)的类在幕后完成的。

因此,您提出的任何方法之间的性能都不会有显着差异。

下面的个人偏好

我通常会在每项活动中保留一个参考作为参与者。

class MainActivity extends AppCompatActivity {
    Firebase mRef;

如果我有更多的主要列表类型,我会为这些添加成员:

class MainActivity extends AppCompatActivity {
    Firebase mRef;
    Firebase mUsersRef;
    Firebase mPostsRef;

    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(...);
        ...
        mRef = new Firebase("https://yours.firebaseio.com");
        mUsersRef = mRef.child("users");
        mPostsRef = mRef.child("posts");
        ...
    }

通过在每项活动中放置所有内容,这些内容都非常独立。

答案 1 :(得分:0)

1)我个人并没有使用单吨的火力 2)。不要使用第二个。可能有时你想要一个动态路径变量.. 3)我认为3 n 4具有相同的效果..

答案 2 :(得分:0)

我这样做。!这个方法也可以帮助我获取未知的子密钥及其访问权限。!

  mdatabaseRef.child("users").orderByKey().equalTo(key).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {


                            if(lList.size()>0)
                                lList.clear();






            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {




     if(postSnapshot.getKey()!=null)
       {
     Log.e(TAG, "::User:Child:1"+postSnapshot.getKey());

    mdatabaseRef.child("Users")
    .child(postSnapshot.getKey())
    .addValueEventListener(new ValueEventListener() {
      @Override



      public void onDataChange(DataSnapshot dataSnapshot) {

      Log.e(TAG, "::Post::Child:2"+dataSnapshot.getKey());

      for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {


        final Post post= postSnapshot.getValue(Post.class);