存储所有活动的共享对象

时间:2011-07-05 14:12:51

标签: android object android-activity

我有一个班级:

public class DbAdapter {
    private DbHelper dbHelper;
    private SQLiteDatabase db;
    private final Context context;
    ...
}

我想让它在所有活动中都可用。该类提供对我的sqlite数据库的访问。

最优雅,最简洁的方法是什么?我想在每个活动中创建对象(它应该“连接”我到同一个数据库,对吧?)。

4 个答案:

答案 0 :(得分:2)

您可以实现扩展Application类。谷歌有这样的说法:

  

需要的人的基础课程   维护全球申请状态。您   可以提供您自己的实现   在你的中指定它的名字   AndroidManifest.xml中的   标记,这将导致该类   在进程时为您实例化   对于您的应用程序/包是   创建

     

通常不需要子类   应用。在大多数情况下,静态   单身人士可以提供相同的   功能更加模块化。   如果你的单身人士需要全球化   上下文(例如注册   广播接收机),功能   检索它可以给出一个Context   内部使用   Context.getApplicationContext()的时候   首先构建单身人士。

我自己就是这样做的:

public class App extends Application {

    private DbHelper dbHelper;

    @Override
    public void onCreate() {
        super.onCreate(); 
        dbHelper = new DbHelper(this);

    }

    public SQLiteDatabase getDatabase(){
        return dbHelper.getWritableDatabase();
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        dbHelper.close();
    }   
}

然后你只需要调用getApplicationContext.getDatabase()

来访问它

答案 1 :(得分:0)

您可以查看Singleton Pattern,它可以让一个类只创建一个对象,并使该对象可以从任何地方访问。希望这会有所帮助。

答案 2 :(得分:0)

我认为实现此目的的最佳方法是使用ServiceService将继续引用DbAdapter,您的所有活动都将连接到Service。当活动连接到服务时,它将保留对它的引用,并且每次需要数据库访问时,它将用于获取DbAdapter。使用此方法,您可以控制数据库连接。如果没有任何活动连接到服务,那么没有人使用数据库连接,你可以释放它。

答案 3 :(得分:0)

看看ContentProviders。它们用于访问数据。无论在链接中是否强调“在应用程序之间共享数据”,它们都不必公开 - 您可以将它们用作访问应用程序中数据的集中方式。

这篇关于“Writing Your Own ContentProvider”的博客文章显示了一些用于设置在一个应用程序中运行的ContentProvider的代码。