Обработка собственных потоков при выводе приложения на передний план - PullRequest
0 голосов
/ 11 июля 2019

Мы портировали немного сложное приложение C \ C ++ на Android. Немного функциональности достигается с помощью потоков Java, и много других функций достигаются с помощью собственных потоков на стороне C. Все нативные потоки создаются с помощью вызовов pthread_create (). Мы также используем много статических и глобальных переменных во всех наших собственных потоках. Мы также используем Posix Semaphores для синхронизации потоков. Наше приложение работает, как и ожидалось, пока оно находится на переднем плане, и у нас возникают проблемы, когда оно отправляется в фоновый режим и позже возобновляется.

Я хотел бы знать, как обрабатываются потоки Java и собственные потоки, когда приложение отправляется в фоновый режим. Из различных постов я знаю, что приложение в фоновом режиме может быть убито в любое время ОС Android. Теперь,

  1. Я хочу знать, уничтожает ли ОС Android все приложение или же оно может убить только несколько выбранных потоков приложения? (Когда наше приложение работает, оно будет работать с 10-15 потоками).
  2. Являются ли потоки Java в равной степени восприимчивыми, как и нативные потоки, когда ОС решает их уничтожить? Когда они принадлежат одному приложению.
  3. Допустим, приложение отправляется в фоновый режим, просто перетаскивая экран уведомлений, и в течение одной-двух секунд экран уведомлений перетаскивается вверх, в результате чего приложение выходит на передний план в течение секунды (очень быстро). В этом сценарии, если предположить, что системе не хватает памяти и достаточно заряда батареи, будет ли ОС уничтожена какими-либо потоками или порциями приложения?
  4. Когда приложение вернется на передний план, будут ли глобальные переменные и статические переменные собственных потоков сброшены в 0? или они будут хранить свои предыдущие значения (значения, которые они хранили непосредственно перед отправкой на задний план)? Предполагая, что поток не был уничтожен ОС.
  5. Предполагается, что в фоновом режиме не работают другие приложения, и только наше приложение было переведено в фоновый режим нажатием кнопки «Домой», а затем через несколько секунд (5 или менее), если приложение выведено на передний план, есть ли вероятность того, что какой-либо из потоков приложения будет уничтожен ОС (при условии, что наше приложение является единственным запущенным приложением, а другие приложения в фоновом режиме и уровень заряда батареи не превышают 80%)

Я прошел по ссылке ниже, но они не ответили на все мои вопросы убедительно. Поэтому выкладываю мой вопрос для убедительного ответа.

Обработка собственных потоков во время onPause ()

...