我在json中有很多数据,我获取它并使用getter setter获取和设置并使用下面的语句插入
module Paperclip
class Colorspace < Thumbnail
def transformation_command
scale, crop = @current_geometry.transformation_to(@target_geometry, crop?)
trans = []
trans << "-coalesce" if animated?
trans << "-auto-orient" if auto_orient
trans << "-resize" << %["#{scale}"] unless scale.nil? || scale.empty?
trans << "-crop" << %["#{crop}"] << "+repage" if crop
trans << '-layers "optimize"' if animated?
trans << "-strip -colorspace RGB" unless is_rgb?
trans
end
protected
def is_rgb?
colorspace = identify("-verbose %m :file | grep 'Colorspace'", :file => "#{@file.path}[0]").to_s.downcase.strip
colorspace && colorspace.include?("rgb")
rescue Cocaine::ExitStatusError => e
return false
rescue Cocaine::CommandNotFoundError => e
raise Paperclip::Errors::CommandNotFoundError.new("Could not run the `identify` command. Please install ImageMagick.")
end
end
end
但查询未插入完整记录而我的应用程序崩溃,我的行数为40,000。
答案 0 :(得分:1)
如果您在UI线程的数据库中插入记录,我建议您使用AsyncTask
来执行该任务。
UI线程上的太多工作可能会导致此问题。
答案 1 :(得分:0)
根据您的说法,行数很大,因此建议不要使用AsyncTask
,因为它不会影响Activity
的生命周期。
例如,如果“活动”死亡,那并不意味着AsyncTask也死亡,
1。
但是,假设重新启动Activity
时发生的屏幕旋转也会导致AsyncTask
重新启动,
2。
一旦执行AsyncTask
并按回去,然后再次进入同一个Activity中,之前执行的AsyncTask尚未完成,
上述两种情况的行为都可能破坏数据或重复数据。
这就是为什么我会使用以下方法推荐的原因,
在工作线程中执行的名为IntentService
的方法中使用handleIntent()
,这样我们就不必担心后台任务或阻塞主UI线程了,
使用IntentService
的另一个主要优点是,一旦完成将数据插入SQLite数据库的操作,IntentService会自动自杀该工作线程,因此无需再做与之相关的手动操作为此,
由于它在工作线程上运行,因此很少有机会担心内存泄漏。
插入完成后,我们可以使用Handler和Messengers进行与UI相关的进一步操作。