我正在制作一个已定义文件列表的浏览器。 我想压缩空文件夹(像基于想法的IDE一般可以做)
最初我有一个文件列表(我是从MediaStore获得的):
folder1/folder2/folder3/file1.mp3
folder1/folder2/folder3/file2.mp3
folder1/file3.mp3
我希望我的浏览器具有以下结构:
folder1
-folder2/folder3
-file1.mp3
-file2.mp3
-file3.mp3
我是怎么做到的:
当我第一次从MediaStore获取文件时,我在数据库中创建了一个表:
id name parent_id has_songs
0 folder1 -1 1
1 folder2 0 0
2 folder3 1 1
每次浏览器显示文件夹时,它都会向数据库发出请求。 然后我开始检查里面的文件夹(需要每次检查对数据库的额外请求):如果文件夹没有歌曲并且只有一个子文件夹然后压缩它们,那么检查下一个和下一个。
对于上面的示例,如果我想查看folder1的“内部”,它会向本地数据库发出3个请求:
1. Get list of all folders (Make a request to the db here)
2. Check folder2 has one subfolder and doesn't have songs (Make a request to the db here)
3. Check folder3 has one subfolder and doesn't have songs (Make a request to the db here)
1。这是实现此目的的最佳方式吗?
2。性能是否至关重要 用户点击后向本地数据库发出如此多的请求?
答案 0 :(得分:1)
这取决于您的环境。 :)
一般来说: 如果文件列表相对较小,则值得考虑是否可以将所有信息保存在内存中。如果你有足够的可用内存,这可能是最好的解决方案,因为它比到达数据库更快。我曾经创建一个实际代表目录和文件结构的对象,然后视图端打开并根据用户需求关闭块。 (全部打开,关闭所有等。)
这是实现此目的的最佳方法吗? 环境是关键。正如我所提到的那样,这可能是一个很好的解如果您使用的是远程(或更高级的 [SQLite is able to do it])数据库服务器,那么考虑创建包含子计数的视图也是一件好事。 (或者只是更改生成的表,引入“inside_dir_count”字段。)这样就可以获取整个路径。
在用户点击时向本地数据库发出如此多的请求对性能至关重要吗? 这是对您在此处表示的数据库的相对较小的请求,如果它真的取决于用户的点击,那么这是一个很好的解决方案。提到的本地数据库应该在很短的时间内做出响应。这个动作不会每秒发生1000次,所以在我个人看来这是一个很好的解决方案,但是在所有方面都有改进的余地。