java - Android中建议的每应用程序CPU负载

标签 java android audio libpd

我正在开发一个Android应用程序,该程序使用libpd运行大量的音频任务。 Libpd的音频线程的优先级为Process.THREAD_PRIORITY_URGENT_AUDIO。

在三星Galaxy S3上,CPU负载始终保持在20%到30%之间。这对我来说似乎很合理,但是,当音频服务在后台运行且cpu负载约为30%时,打开另一个应用程序会导致音频丢失很多。

有人可以解释这种行为吗?我认为像S3这样的四核电话的最大负载为400%(在adb shell 中使用“顶部”显示)。因此,我不明白为什么当只使用30%的CPU时,像libpd的音频线程这样高度优先的线程无法获得足够的CPU资源。

任何建议将不胜感激,谢谢;)

最佳答案

好吧,我不确定Android的内核如何完成其​​OS任务分配,但是我可以告诉您,最大CPU负载(100%或可能的最大负载)并不是真正可以实现的。 task scheduling有几种方法,但是大多数建议您将其保持在CPU最大值的70-80%,以确保任务按时完成。

这似乎并不重要,因为您仅使用了30%,但请记住,UI线程需要运行,正常的后台应用程序正在运行(SMS,BBM,Whatsapp,Facebook等),并且您拥有现在运行另一个可能很耗力的应用程序。操作系统将决定何时执行什么操作,并且尽管考虑了用户优先级,但操作系统将始终具有优先级。当应用启动时,或者有人按下主页或后退按钮时,您的退出可能会出现。这只是野兽的本质,智能手机虽然越来越好,但在处理能力方面仍然相对较低。

我知道这并不能完全为您提供帮助,因为我不确定如何优先/增加操作系统任务的优先级(即使可能的话),但我希望它可以解释为什么会发生这种情况。如果您有时间阅读它们,内核将非常有趣。

关于java - Android中建议的每应用程序CPU负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23616739/

相关文章:

java - JOSSO 本身是否提供任何用户管理?

JavaFX如何停止当前传输文件SFTP

java - 正则表达式模式匹配不适用于 java 中的特定字符串

android - 如何在Android中默认打开一个 fragment ?如何签署被点击的按钮?

audio - 设计 iPhone 应用程序的建议音量是多少?

javascript - 使用 JavaScript 按顺序播放 MP3 文件,无需 HTML5 音频

java - 为什么会出现内存不足错误?

android - react native 后台进程

android - android studio 中未确定包名

android - 从android中的视频中提取MP3格式的音频