我正在制作一个包含各种活动的应用程序,这些活动都需要访问同一个数据库。
我已经建立了一个抽象类,它具有所有活动的一些共同元素(特别是特定于应用程序的标题栏及其一些行为,以及一些重复的代码和变量)。
我已经通过服务设置了对数据库的访问。我觉得这个服务应该只有一个实例。
与服务器交互和通信的推荐方式似乎是绑定。
虽然这似乎有点麻烦(因为您需要指定两个额外的类 - Binder 和 ServiceConnection),但不可否认,这一切都很好。
这是我遇到问题的地方:绑定是特定于活动的。我可以从共享的抽象类代码中查询数据库,但我似乎不能从子类代码中做同样的事情。
出现在我的抽象类中的代码:
protected static DatabaseService autoservice;
protected static boolean serviceBound = false;
protected static ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
AutoBinder binder = (AutoBinder) service;
autoservice = binder.getService();
serviceBound = true;
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
serviceBound = false;
}
};
如果我从子类中检查 serviceBound,它总是会回复 false。我试过把它放在静态和非静态。
我觉得获取服务的静态实例的单例模式可能是一种(更好的)查询数据库的方式,但话又说回来,谷歌提出绑定可能是有原因的。
从我的抽象超类及其各种子类访问数据库的最佳(和最干净)方法是什么?