gpt4 book ai didi

java - Android海量数据库创建

转载 作者:搜寻专家 更新时间:2023-10-30 20:26:26 26 4
gpt4 key购买 nike

伙计们,这是一个大问题
我目前正在开发一个涉及大型数据库创建的应用程序。它的基本功能是扫描整个设备以查找任何类型的媒体文件并将其添加到数据库(按某些文件扩展名过滤)。
它目前的做法是使用递归函数扫描设备的文件夹,每次它找到一个实际上是文件而不是目录的文件并匹配我选择的文件扩展名时,它会将文件的路径添加到先前创建的 ArrayList仅包含字符串。
这是在 AsyncTask 中实现的,因此它是在后台完成的。
该任务完成后,它会将 ArrayList 传递给另一个负责将这些文件添加到数据库的 AsyncTask。出于简单起见,我只获取了文件的路径、名称和存储在每个条目标签中的标题(简单的 sqlite 东西),并在游标适配器上的另一个 Activity 中的 ListView 中显示了标题等等(这不是真的对我来说是个问题)。
现在它运行良好,不会崩溃或返回任何错误信息(我现在正在 OnePlus One 上进行测试)。
但是我的手机上有一个非常大的音乐库(大约 5400 首歌曲),几乎占满了我的整个存储空间。出于某种对我来说未知的原因,我提到的扫描任务(使用 ArrayList)停止在大约 3000 个文件并将 ArrayList 传递给第二个任务,这显然不是我想要的。
我的猜测是可能存在很大的性能问题,使用 ArrayList 并不是解决此问题的最佳方法。它可能适用于 3000 以下的许多文件,但高于 3000 的文件也是必要的...
那么你们有什么建议呢?我的方法是否缺少某些东西,或者我是否必须尝试完全不同的东西?

最佳答案

您不需要扫描您的文件夹(并且可能也不需要创建媒体文件数据库),您可以只使用 MediaStore

The Media provider contains meta data for all available media on both internal and external storage devices.

例如,这段代码将返回所有可用的音频播放列表

private List<Playlist> getPlayListsList(){
ContentResolver resolver = getContentResolver();
Uri uri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
String[] columns = { _ID, NAME };
Cursor playLists = resolver.query(uri, columns, null, null, null);

List<Playlist> result = new ArrayList<>();
if (playLists == null) {
return result;
}

Cursor cursor;
for (boolean hasItem = playLists.moveToFirst(); hasItem; hasItem = playLists.moveToNext()) {
long id = playLists.getLong(playLists.getColumnIndex(_ID));
String name = playLists.getString(playLists.getColumnIndex(NAME));

cursor = resolver.query(MediaStore.Audio.Playlists.Members.getContentUri("external", id),
new String[]{MediaStore.Audio.Playlists.Members.TITLE, MediaStore.Audio.Playlists.Members.ARTIST,
MediaStore.Audio.Media.DATA, MediaStore.Audio.Playlists.Members.PLAY_ORDER}, null, null, null
);

int songsCount = cursor.getCount();

result.add( new Playlist(
id,
name,
songsCount));
cursor.close();
}
playLists.close();
return result;
}

关于java - Android海量数据库创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31746143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com