Android中如何在sqlite数据库中插入大量数据
我有很多数据存储在CSV文件(大约20100行)中,需要将其插入sqlite数据库Android中如何在sqlite数据库中插入大量数据,android,sqlite,csv,android-sqlite,Android,Sqlite,Csv,Android Sqlite,我有很多数据存储在CSV文件(大约20100行)中,需要将其插入sqlite数据库 此插入需要很长时间才能完成。插入此数据的最快方法是什么?使用AsyncTask,在数据库中插入20100行。使用此异步任务,整个工作将在后台运行。要了解更多信息,请按照您的建议进行操作,行数非常多,我建议不要使用AsyncTask,因为它与您的活动生命周期无关,即如果启动它的活动死亡,并不意味着AsyncTask也会死亡,因此,如果您尝试启动一个异步任务,并且您的活动以某种方式停止,例如屏幕旋转或按下后退键,则在
此插入需要很长时间才能完成。插入此数据的最快方法是什么?使用
AsyncTask
,在数据库中插入20100
行。使用此异步任务,整个工作将在后台运行。要了解更多信息,请按照您的建议进行操作,行数非常多,我建议不要使用AsyncTask
,因为它与您的活动生命周期无关,即如果启动它的活动死亡,并不意味着AsyncTask
也会死亡,因此,如果您尝试启动一个异步任务,并且您的活动以某种方式停止,例如屏幕旋转或按下后退键,则在重新启动另一个异步任务时,将生成该任务,而不是将其链接到已在执行的异步任务。因此,重复相同的操作
所以,总而言之,我建议采用以下方法
(A)
创建一个IntentService
,它的handleIntent()
api已经在工作线程中执行,因此您不必担心任何事情,并且一旦队列中的所有消息完成,它就会自动死亡,因此根本不必担心任何资源泄漏
编写批量插入行的逻辑,并使用content resolver bulkInsert()api进行同样的操作。我建议每批插入100个ROE,您可以执行回滚和错误检查以确保插入正常进行
完成所有插入后,您可以使用Handler和Messenger发回UI
有了这些,你将面临两大挑战
不挂断用户界面,避免任何可能的ANR
即使按下back键,也要确保db操作在后台任务中顺利进行
最好的解决方案是使用服务和executor,因为正如OP所描述的,这个过程可能需要很多时间。感谢你们将能够关闭应用程序或将其移动到后台,而不用担心你们漫长的过程被破坏
使用AsyncTask不是一个好主意,因为它是为简短的操作而设计的,正如在上所描述的,您还必须小心使用它。更改方向屏幕会导致重新创建视图以及asynctask的任务
AsyncTasks最好用于短期操作(几秒钟
如果您需要让线程长时间运行
同时,强烈建议您使用
并发包,如Executor、ThreadPoolExecutor
未来的任务
使用AsyncTask Insert在数据库中插入20100行。使用此异步任务可以在后台运行工作。有关更多信息,请点击此链接,因为它花费了太多时间。我也试过了@Jigarshekh你必须限定“长时间”的含义。如果编码正确,则不会超过几秒钟ContentResolver.bulkInsert
应该会让它更快。然而,我建议您重新考虑您的应用程序设计:您真的需要在运行时插入这么多数据吗?在开发应用程序时,可以考虑创建和填充数据库,并将其与应用程序一起使用。如果不控制定位,Asynctask就不安全。最好的方法是使用该服务,这样即使应用程序处于后台或关闭状态,进程也能完成。AsyncTask不是为很长的进程设计的。好吧,但我是android开发的新手,所以如何使用它呢?你能帮我吗@死鱼有很多书和在线教程描述这项服务是如何工作的。随便看看。我是android开发的新手,你能给我解释一下如何使用它吗@Techfiststart编码,并与大家分享您的努力将帮助您前进。无法为您编写完整的逻辑,请尝试执行我已经编写的操作,如果您遇到问题,请给我回信。好的,如果有任何问题,我将尝试再次询问您@Techfist