我正在尝试编写一种最快的扫描整个SD卡的算法。我要实现的是类似于QuickPic的东西,它可以进行“正常速度”的SD卡初始扫描,但是任何后续刷新都非常快。
我试过了几种方法,并且还有一些我尚未测试的想法:
1)始终扫描整个SD卡。我试过了这个...它的初始扫描速度有点慢。但所有后续扫描都更快,但不像 QuickPic 那样快。
2)在初始扫描后添加FileObserver到所有文件夹。虽然这只会增加应用程序的大约1 MB的内存,但我担心这会影响性能甚至耗电,因为它必须一直运行。而且,我的SD卡上有数据库,我不断地获取日志文件被创建/删除的事件。我确定在使用其他应用程序时,将会有其他文件夹/文件需要我不断获取通知。不确定这是否对性能有好处。
3)使用MediaStore中的数据。不幸的是,在我的HTC Desire手机上,媒体库与SD卡上的内容并不总是同步更新(不确定为什么),但这还不够好。
4)使用ContentObserver。我还没有尝试过这个,必须检查文档,但我有一种感觉,如果MediaStore没有将图像保存在其数据库中,则我也无法从ContentObserver中获取它。
你们还有其他建议吗?基本上,我的需求是要在某个时间点知道SD卡上的所有图像文件。初始扫描可能需要花费一些时间,后续扫描应尽可能快(我知道这取决于SD卡上的文件夹/文件数),但QuickPic可以在约0.6-0.8秒内扫描整个SD卡,而我只能做得非常慢。
我试过了几种方法,并且还有一些我尚未测试的想法:
1)始终扫描整个SD卡。我试过了这个...它的初始扫描速度有点慢。但所有后续扫描都更快,但不像 QuickPic 那样快。
2)在初始扫描后添加FileObserver到所有文件夹。虽然这只会增加应用程序的大约1 MB的内存,但我担心这会影响性能甚至耗电,因为它必须一直运行。而且,我的SD卡上有数据库,我不断地获取日志文件被创建/删除的事件。我确定在使用其他应用程序时,将会有其他文件夹/文件需要我不断获取通知。不确定这是否对性能有好处。
3)使用MediaStore中的数据。不幸的是,在我的HTC Desire手机上,媒体库与SD卡上的内容并不总是同步更新(不确定为什么),但这还不够好。
4)使用ContentObserver。我还没有尝试过这个,必须检查文档,但我有一种感觉,如果MediaStore没有将图像保存在其数据库中,则我也无法从ContentObserver中获取它。
你们还有其他建议吗?基本上,我的需求是要在某个时间点知道SD卡上的所有图像文件。初始扫描可能需要花费一些时间,后续扫描应尽可能快(我知道这取决于SD卡上的文件夹/文件数),但QuickPic可以在约0.6-0.8秒内扫描整个SD卡,而我只能做得非常慢。