是否值得为 android 音乐播放器生成播放列表文件?

Is it worth generating a playlist file for an android music player?

我打算为 android 编写一个满足特定需求的音乐播放器(这对我的问题无关紧要)。

我想用 sdcard 上的目录(在 one 主目录内)识别内部播放列表,因为我知道我的用户会设置有组织的目录。因此,简单地读取单个列表中的所有音频文件以让用户之后手动创建播放列表可能会很烦人。

我想知道是否值得为此目的生成分层播放列表 文件

我目前的计划是在应用程序启动时 运行 一个 "library inspector"。此检查器将使用 "library state" 包含

形式的分层数据
String filename;
long   modified; // timestamp of last modification

递归检查库是否需要创建新的播放列表文件。如果此匹配检查失败,则会创建包含新 "library state" 的分层文件(元数据:标题、艺术家、专辑... - 例如 xml)。此文件应防止在应用程序的每个 运行 中读取所有元数据。

明确说明:我正在寻找一种播放音乐的有效方式 - 但电池安全!

由于我是移动应用程序开发的新手,所以我对省电不是很熟悉。读取一个文件比递归元数据读取更节省吗?或者我可能会做得太过火?老牌应用的一些攻略你知道吗?

我对你的想法很感兴趣 :) 我希望我糟糕的英语不会妨碍你的理解......我很抱歉。

谢谢!

最大

我无法从使用 MediaStore 或 SQLite 的角度回答,但可以给你一些关于最小化电池使用的建议。

  • 不要使用递归。递归在结构上紧凑但在效率方面很糟糕。由于访问堆栈、可能进行上下文切换等原因,每次调用都非常昂贵。如果递归非常深,还存在磁盘使用、页面交换等方面的问题。
  • 对任何大型列表使用有效的搜索算法。您完成手头工作的速度越快,处理器空闲的时间越长,电源状态越深,节电越多。
  • 尽可能将您的搜索/访问集中在一起。例如,如果您必须执行 3 次搜索,每次搜索间隔 1 秒,执行时间为 0.5 秒,您将使处理器在高功率状态下保持活动状态超过 4.5 秒,然后让它休息并进入低功率状态.如果将查询集中在一起,您会在高功率状态下花费 1.5 秒,在低功率状态下花费 3 秒。粗略地说,您使用了不到 1/3 的功率。
  • 尽量使用板载内存。我不知道访问 sdcard 有多慢,但它会减慢你的算法并可能增加你的功耗。
  • 尝试设置您的数据库条目和其他数据结构,以便它们自然地与处理器的缓存对齐(例如 16B 对齐)。这将大大加快例程(L1 缓存访问可能是 1 个周期,L2 10 个周期,内存 100 个周期——这些值是说明性的,但大概)。而且您的日常工作越快,闲置的时间越长,节电就越多。

我的计时持续时间(例如相隔 1 秒)仅用于说明目的。有多种空闲状态和不同的进入这些状态的规则,这会使真实的插图变得非常复杂。

我不太了解数据库的电源效率。我知道有一些专为移动和低功耗设备设计的数据库。不幸的是,我不记得它们是什么。 (不要引用我的话,但我记得一些关于伯克利和实时的事情。

PS你的英文看起来不错