考虑以下几点:我有Service
,写入 DB 中AsyncTask
。我的 Activity 从数据库读取数据(为简单起见,请考虑 UI 线程)。我使用访问数据库SQLiteOpenHelper
。我在中创建单个实例应用程序 onCreate()然后在服务和活动中获得它。我的数据库是否有可能“死锁”?以前,我使用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;
}
}
活动中:
OpenHelper helper=(App)getApplication().getHelper();
SQLiteDatabase db=helper.getReadableDatabase();
// Do reading
在服务内部,在单独的线程中:
OpenHelper helper=(App)getApplication().getHelper();
SQLiteDatabase db=helper.getWritableDatabase();
//Do writing
这样会安全吗?
UPD This可能是解决方案,但不确定如何使用它。
迟到了,迟到的回答。你完全没问题。实际上,这才是正确的做法。请参阅我的博文:http://touchlabblog.tumblr.com/post/24474750219/single-sqlite-connection/。在这里挖掘我的个人资料。这方面的例子很多。 ContentProvdier 只是很大的开销,除非您在应用程序外部共享数据,否则不需要。事务有助于加快速度并(显然)提高一致性,但不是必需的。
只需在您的应用程序中使用一个 SqliteOpenHelper 即可安全。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)