android - 从多个线程访问的 SQLite 数据库

标签 android sqlite

考虑以下内容:我有 Service,它在 AsyncTask 中写入 DB。我的 Activity 从 DB 读取数据(为简单起见考虑 UI 线程)。我使用 SQLiteOpenHelper 访问数据库。我在 Application onCreate() 中创建单个实例然后在服务和 Activity 中获得它。有没有可能让我的数据库“死锁”?以前,我使用 ContentProvider 进行此类操作。尽管它基于使用单个 SQLiteOpenHelper 实例,但我决定通过排除 ContentProvider 来简化我的项目。

考虑代码:

public class App extends Application {

    private OpenHelper openHelper;

    @Override
    public void onCreate(){
        super.onCreate();
            openHelper=new OpenHelper();
    }

        public OpenHelper getHelper(){
            return openHelper;
        }
}

在 Activity 中:

OpenHelper helper=(App)getApplication().getHelper();
SQLiteDatabase db=helper.getReadableDatabase();
// Do reading

在 Serice 内部,在单独的线程中:

OpenHelper helper=(App)getApplication().getHelper();
SQLiteDatabase db=helper.getWritableDatabase();
//Do writing

安全吗?

UPD This可能是解决方案,但不确定如何使用它。

最佳答案

迟到,迟到的答案。你完全没问题。实际上,这才是正确的做法。请参阅我的博文:http://touchlabblog.tumblr.com/post/24474750219/single-sqlite-connection/ .在这里浏览我的个人资料。这方面的例子很多。 ContentProvdier 只是很多开销,除非您在应用程序之外共享数据,否则不需要。事务有助于加快速度并(显然)提高一致性,但这不是必需的。

只需在您的应用程序中使用一个 SqliteOpenHelper,您就安全了。

关于android - 从多个线程访问的 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6225374/

相关文章:

android - 使用 activeAndroid 更新多列

SQLite:标签和产品交集

ios - Sqlite 中的 acos 函数

android - 如何使图像适合android中的imageButton?

android - 自定义 RatingBar 样式只显示一个点,其他奇怪的行为

android - 用于聊天应用的 RecyclerView

android - 在android中获取mp3持续时间

android - 简单游标适配器需要最低 api 11 问题

Android: long => SQLiteDatabase => long , 精度丢失

Android SQLite Journal 行为改变了吗?