在数据库助手类中调用delete()命令会导致我的android应用程序的UI出现延迟。我对它进行了计时器测试和简单的命令this.db.delete(“tonightSets”,“id =”+ item_id,null);需要很长时间才能回归 以下是我重复执行相同查询所获得的速度(以毫秒为单位) 1229ms 287ms 779ms 2604ms! 817ms 为什么这么慢?该表中只有30条记录,每行有大约10列。我在同一个表上做了更复杂的多个select和count函数,返回时间不到9ms 我怎样才能解决这个问题?有没有办法异步这样做,所以它不会在UI中造成延迟? 非常感谢
答案 0 :(得分:2)
为什么这么慢?
如果您在设备上运行此功能,欢迎使用闪存I / O. Flash I / O可能非常慢,具体取决于设备的其他功能。大多数Android设备使用YAFFS2文件系统,该文件系统使用全局分区锁定来对文件系统进行单线程访问。由于磨损水平平衡等原因,闪存写入速度较慢。
您应该观看2010年Google I | O大会上Brad Fitzpatrick的“Writing Zippy Android Apps”演示文稿。在那里,他表示将单个字节写入闪存 - 虽然通常速度非常快 - 有时可能需要200毫秒。
因此,一般建议不要在主应用程序线程上执行flash I / O.
有没有办法异步这样做,所以它不会在UI中造成延迟?
使用AsyncTask
。