问题关键字,Android、AsyncTask、SQLite、多线程

头号大宝贝 2013-12-31 01:26:17


启动多个AsyncTask从服务器上下载数据,用SQLite格式保存。
如何避免SQLite异常以及锁死?

LoadDatabases实现SQLiteOpenHelper抽象类。
每个对象的DAO层new LoadDatabases对象。
这样是创建多个SQLiteOpenHelper的继承类,这样就不会存在
//Cannot perform this operation because the connection pool has been closed
这种异常。

但是如果只创建一个SQLiteOpenHelper的继承类给AsyncTask。就会出现那个异常。
其次,再页面加载数据时,如果有AsyncTask正在使用这一个LoadDatabases对象,
则新开的线程不会调用LoadDatabases去获取数据。
就是两个线程一个获取数据,一个读取数据。用的都是一个LoadDatabases对象。
如果去服务器读取数据的AsyncTask没有执行完成,那么在本地查询的AsyncTask会一直等待。


请有这方面资料或者的Demo的。给个指导。谢谢。

...全文
964 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmorss 2014-01-02
  • 打赏
  • 举报
回复
引用 2 楼 liuMember 的回复:
[quote=引用 1 楼 birdsaction 的回复:] 1. 你开始开启一个线程去服务器读取数据,读取完了就在当前这个线程里面保存数据到sqlite中。 不需要开启2个线程。 你这个程序好像没有涉及到更新UI线程,也不需要用AsyncTask. 2. 如果是同时开启多个线程去下载数据,可以把数据保存在内存里面等 所有数据已经下载完成 再一次性更新到数据库sqlite,这样其实比同时更新sqlite性能要高。 LoadDatabases db = new LoadDatabases(); synchronized(db) { //锁住 } 3. 当你查询的时候,数据还未下载完,可以直接显示 数据未发现.
1,页面有个进度条,用来显示当前缓存的内容。 2,这个主意可以采纳了。 3,去服务器查询的线程是个缓存线程。也就是当用户查本地数据时接近换存量时,缓存线程就要继续执行去下载数据。[/quote]那还不给分
头号大宝贝 2013-12-31
  • 打赏
  • 举报
回复
引用 1 楼 birdsaction 的回复:
1. 你开始开启一个线程去服务器读取数据,读取完了就在当前这个线程里面保存数据到sqlite中。 不需要开启2个线程。 你这个程序好像没有涉及到更新UI线程,也不需要用AsyncTask. 2. 如果是同时开启多个线程去下载数据,可以把数据保存在内存里面等 所有数据已经下载完成 再一次性更新到数据库sqlite,这样其实比同时更新sqlite性能要高。 LoadDatabases db = new LoadDatabases(); synchronized(db) { //锁住 } 3. 当你查询的时候,数据还未下载完,可以直接显示 数据未发现.
1,页面有个进度条,用来显示当前缓存的内容。 2,这个主意可以采纳了。 3,去服务器查询的线程是个缓存线程。也就是当用户查本地数据时接近换存量时,缓存线程就要继续执行去下载数据。
Birds2018 2013-12-31
  • 打赏
  • 举报
回复
1. 你开始开启一个线程去服务器读取数据,读取完了就在当前这个线程里面保存数据到sqlite中。 不需要开启2个线程。 你这个程序好像没有涉及到更新UI线程,也不需要用AsyncTask. 2. 如果是同时开启多个线程去下载数据,可以把数据保存在内存里面等 所有数据已经下载完成 再一次性更新到数据库sqlite,这样其实比同时更新sqlite性能要高。 LoadDatabases db = new LoadDatabases(); synchronized(db) { //锁住 } 3. 当你查询的时候,数据还未下载完,可以直接显示 数据未发现.

80,347

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧