问题关键字,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的。给个指导。谢谢。

...全文
255 点赞 收藏 3
写回复
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. 当你查询的时候,数据还未下载完,可以直接显示 数据未发现.
回复 点赞
发动态
发帖子
Android
创建于2009-10-09

4.6w+

社区成员

9.0w+

社区内容

移动平台 Android
社区公告
暂无公告