我有一个使用 AsyncTask 下载并将一些数据保存到数据库的活动。要打开数据库,我们需要将 Context 参数传递给 SQLiteOpenHelper 的 onCreate 方法,这意味着数据库在某种程度上需要上下文。
我只是好奇,当设备转动并且活动经历破坏和创造循环时会发生什么?可以在活动的构造函数中而不是在活动的 onCreate() 方法中打开数据库吗?
问题是我从另一个线程使用数据库,我想知道当活动被破坏和重新创建时会发生什么
我有一个使用 AsyncTask 下载并将一些数据保存到数据库的活动。要打开数据库,我们需要将 Context 参数传递给 SQLiteOpenHelper 的 onCreate 方法,这意味着数据库在某种程度上需要上下文。
我只是好奇,当设备转动并且活动经历破坏和创造循环时会发生什么?可以在活动的构造函数中而不是在活动的 onCreate() 方法中打开数据库吗?
问题是我从另一个线程使用数据库,我想知道当活动被破坏和重新创建时会发生什么
一种解决方案是使用 ApplicationContext 而不是 ActivityContext。您只需要一个从 Application 构造函数请求 ApplicationContext 的静态方法。
如果您使用某种单例来访问上下文,您不会遇到任何并发问题。
请参阅此处的示例:http ://androidcookbook.com/Recipe.seam?recipeId=1218
另一种方法是使用 LoaderManager 来跟踪您打开的数据库连接。
见这里: http: //developer.android.com/reference/android/app/LoaderManager.html (也有一个完整的例子)
LoaderManager 在兼容包中可用于低至 Android 1.5
迈克尔
如果您想在后台执行一些数据库操作。你应该使用“服务”。服务可以在后台执行长时间运行的操作。
这是链接:http: //developer.android.com/guide/topics/fundamentals/services.html