我可以将Firebase ValueEvent侦听器放在Application类

时间:2018-02-08 11:05:51

标签: android firebase firebase-realtime-database

我想在5个活动中使用Firebase Value事件侦听器。并且所有的监听器都会做同样的工作,所以我可以将监听器放在Application类中并在应用程序终止时删除监听器吗?

public class MyApplication extends Application {

    private RefWatcher refWatcher;
    private ValueEventListener value_event_listener;

    public static RefWatcher getRefWatcher(Context context) {
        MyApplication application = (MyApplication) context.getApplicationContext();
        return application.refWatcher;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        MultiDex.install(this);
        EmojiManager.install(new IosEmojiProvider());

        if (LeakCanary.isInAnalyzerProcess(this)) {
            // This process is dedicated to LeakCanary for heap analysis.
            // You should not init your app in this process.
            return;
        }
        refWatcher = LeakCanary.install(this);

        value_event_listener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
          //TODO
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                //TODO

            }
        };
        FirebaseDatabase.getInstance().getReference().child(C.DELIVERY).addValueEventListener(value_event_listener);
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        FirebaseDatabase.getInstance().getReference().child(C.DELIVERY).removeEventListener(value_event_listener);
    }


}

1 个答案:

答案 0 :(得分:0)

简短的回答,是的,但有一种更清洁的方式来接近它。

更多SOLID方法是创建一个从您想要侦听此事件的每个地方调用的实用程序类。通过这种方式,您可以在将来需求发生变化时扩展实用程序类。然后可以应用更改,而不会影响使用此更改的所有位置。

它还使得这更容易测试,因为您可以模拟实用程序类来验证不同的方案。