当app在后台时,为什么本机线程的行为会有所不同?

Jan*_*ard 5 c++ multithreading android stl android-ndk

在我的应用程序中,我使用本机线程来处理音频数据.代码看起来非常像这样:

std::thread([this] () {
    while (enabled) {
        if (condition()) {
            process();
        }
        usleep(100);
    }
});
Run Code Online (Sandbox Code Playgroud)

当应用程序在前台时,这可以正常工作.在后台,处理速度不够快,我得到缓冲区欠载.它只能usleep在没有后台工作.我传递的价值usleep没有什么区别.它也不适用于较小的值.我也尝试了,std::this_thread::sleep_for(std::chrono::microseconds(100))但没有什么区别.

我必须使用usleep或类似的东西,以避免高CPU使用,从而节省电池寿命.

当应用程序处于后台时,我该怎么做才能使本地线程的行为相同?

Mat*_*247 4

如果没有明确指定的话,Android 似乎会降低后台应用程序的线程优先级。该文档提到

通常,前台组中的线程从设备获得大约 95% 的总执行时间,而后台组中的线程大约获得 5%。

这可以解释你的欠载。您应该尝试提高优先级,就像那里描述的那样。链接的视频似乎也很有帮助。