从Android中的抽象超类连接到服务

时间:2013-02-08 11:27:38

标签: java android

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

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

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

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

虽然这看起来有点麻烦(因为你需要指定另外两个类--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可能会提出绑定的原因。

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

0 个答案:

没有答案