以前我一贯的写法是getReadableDatabase()和getWritableDatabase() 都是在ui线程进行的,而且在android4.0以上版本都没有任何问题,最近换了个android2.2的设备测试,发现就报错了,异常是SQLiteException 并提示database is locked这些信息,检查我对数据库的操作只不过是写完数据后读数据,应该不存在数据库被锁的问题。
思前想后,在SQLiteOpenHelper 源代码中发现到getReadableDatabase()的如何注解
/*
in the future.
**
Like {@link #getWritableDatabase}, this method may
留意高亮部分,注解说不要写在应用的主线程,包括contentprovider的oncreate方法,我好奇的是 网上大家都是直接写在ui线程,而且看上去是可行的 为什么官方的api注解却提示不可以。还有一个奇怪的问题,就是我说过的遇到的那个异常并不是必定的,是偶尔出现的
so 说下你们的见解吧
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
android的设计就是,不让任何耗时的操作阻塞UI线程……
所有操作DB和网络请求的操作,尽量另起线程。
在以前的版本中,貌似要求不是那么严格。但是现在android对这个要求很严格…………
我的理解,本身android的效率已经被IOS甩在后面了,所以我们做开发的就不要在给android找不愉快了。把耗时操另起线程,是一个良好的习惯……
评论
全部评论 (0)