0

我正在制作一个包含各种活动的应用程序,这些活动都需要访问同一个数据库。

我已经建立了一个抽象类,它具有所有活动的一些共同元素(特别是特定于应用程序的标题栏及其一些行为,以及一些重复的代码和变量)。

我已经通过服务设置了对数据库的访问。我觉得这个服务应该只有一个实例。

与服务器交互和通信的推荐方式似乎是绑定。

虽然这似乎有点麻烦(因为您需要指定两个额外的类 - 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。我试过把它放在静态和非静态。

我觉得获取服务的静态实例的单例模式可能是一种(更好的)查询数据库的方式,但话又说回来,谷歌提出绑定可能是有原因的。

从我的抽象超类及其各种子类访问数据库的最佳(和最干净)方法是什么?

4

0 回答 0