请考虑以下内容:我有Service,它在AsyncTask中写入DB.我的Activity从DB读取数据(为简单起见,考虑UI线程).我使用sqliteOpenHelper访问数据库.我在
Application 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
在Serice内部,在单独的线程中:
OpenHelper helper=(App)getApplication().getHelper(); sqliteDatabase db=helper.getWritableDatabase(); //Do writing
它会安全吗?
解决方法
迟到,迟到的答案.你完全没事.实际上,这是实现它的正确方法.请参阅我的博文:
http://touchlabblog.tumblr.com/post/24474750219/single-sqlite-connection/.在此处浏览我的个人资料.很多这方面的例子.除非您在应用程序之外共享数据,否则ContentProvdier只需很多开销而且不需要.事务处理可以加快速度并且(显然)提高一致性,但不是必需的.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。