2017-01-26 11 views
5

В моем приложении я использую собственные потоки для обработки аудиоданных. Код выглядит примерно так:Почему родные потоки отличаются друг от друга, когда приложение находится в фоновом режиме?

std::thread([this]() { 
    while (enabled) { 
     if (condition()) { 
      process(); 
     } 
     usleep(100); 
    } 
}); 

Это прекрасно работает, когда приложение находится на переднем плане. В фоновом режиме обработка не достаточно быстро, и я получаю буферизацию. Он работает только usleep в фоновом режиме. Значение, которое я перехожу к usleep, не имеет значения. Он также не работает с меньшими значениями. Я также пробовал std::this_thread::sleep_for(std::chrono::microseconds(100)), но это не имеет значения.

Я должен использовать usleep или что-то подобное, чтобы избежать высокой загрузки процессора и тем самым сэкономить время работы от батареи.

Что делать, чтобы заставить туземные потоки вести себя одинаково, когда приложение находится в фоновом режиме?

ответ

4

Похоже, что Android устанавливает приоритет потока для фоновых приложений ниже, если явно не указано иначе. This documentation упоминает

Как правило, нити в группе переднего плана получают около 95% от общего времени выполнения от устройства, в то время как фон группа получает примерно 5%.

Это объясняет ваше недопонимание. Вы должны попытаться увеличить приоритет, как описано там. Связанный video также кажется полезным.

0

Возможно, я ошибаюсь, но похоже, что вы должны расставить приоритеты своей нити в ЦП. Когда приложение находится в фоновом режиме (или уничтожено, но с живыми потоками), потоки приоритируются ОС, и их активность снижается большую часть времени, особенно если они были инициализированы с приоритетом по умолчанию - BACKGROUND (что является низким).

Попытайтесь работать с HandlerThread (android.os). Таким образом, вы можете определить свой приоритет, и в вашем случае я мог бы попробовать THREAD_PRIORITY_AUDIO

Java: (извините за не C++)

HandlerThread thread = new HandlerThread("MyThread", Process.THREAD_PRIORITY_AUDIO) 

 Смежные вопросы

  • Нет связанных вопросов^_^