我想在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);
}
}
答案 0 :(得分:0)
简短的回答,是的,但有一种更清洁的方式来接近它。
更多SOLID方法是创建一个从您想要侦听此事件的每个地方调用的实用程序类。通过这种方式,您可以在将来需求发生变化时扩展实用程序类。然后可以应用更改,而不会影响使用此更改的所有位置。
它还使得这更容易测试,因为您可以模拟实用程序类来验证不同的方案。