在sqlite数据库Android中插入大量数据

时间:2015-09-15 07:13:13

标签: android

我在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。

2 个答案:

答案 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相关的进一步操作。