我正在制作一个包含各种活动的应用程序,这些活动都需要访问同一个数据库。
我已经设置了一个抽象类,它包含所有活动的一些共同元素(特别是特定于应用程序的标题栏及其一些行为,以及一些重复的代码和变量)。
我已通过服务设置了对数据库的访问权限。我觉得这个服务应该只有一个实例。
与服务器进行交互和通信的推荐方式似乎是绑定。
虽然这看起来有点麻烦(因为你需要指定另外两个类--Binder和ServiceConnection),虽然不可否认,这一切都很有效。
这是我遇到问题的地方:绑定是特定于活动的。我可以从共享的抽象类代码中查询db,但我似乎无法从子类代码中执行相同的操作。
我的抽象类中出现的代码:
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。我试过把它静态和非静态。
我觉得获得服务的静态实例的单例模式可能是查询数据库的一种(更好的)方式,但话又说明,Google可能会提出绑定的原因。
从我的抽象超类及其各种子类访问数据库的最佳(也是最干净)方法是什么?