Android 12의 새로운 백그라운드 앱 제한은 고급 사용자에게 큰 골칫거리가 될 수 있습니다. - https://www.xda-developers.com/android-12-background-app-limitations-major-headache/
*구글 번역
Android 12의 새로운 백그라운드 앱 제한은 고급 사용자에게 큰 골칫거리가 될 수 있습니다
Android 12 에는 많은 변경 사항이 도입되었지만 모든 변경 사항이 실제로 사용자를 대상으로 하는 것은 아닙니다. 당신이 재설계한 방대한 Material You와 같은 기능은 분명히 당신의 얼굴에 압도되어 놓치기 어렵지만 디지털 자동차 키 지원 과 같은 것은 놓치기 더 쉬울 수 있습니다. 그러나 완전히 문서화되지 않았을 수도 있는 한 가지 변경 사항은 Termux와 같은 앱에 큰 피해를 입힐 수 있으며 이는 매우 공격적인 백그라운드 프로세스 킬러의 도입입니다.
문맥상 Termux는 Android에서 얻을 수 있는 Linux 터미널 에뮬레이터이고 Termux의 패키지 관리 시스템은 apt 명령으로 검색, 설치 및 제거할 수 있다는 점에서 Debian의 APT(Advanced Package Tool)와 매우 유사 합니다. Termux는 Play 스토어에서 APK 크기를 줄이기 위해 몇 가지 기본 패키지를 즉시 설치하지만 원하는 추가 패키지 를 설치할 수 있습니다 . 사람들은 종종 Termux를 사용하여 구형 스마트폰을 미니 서버로 바꾸거나 일반적으로 스마트폰을 대상으로 하지 않는 다른 프로그램을 실행하는 데 사용합니다. 스마트폰에서 Termux를 사용하여 Python 스크립트를 실행할 수 있으므로 일반적인 사용법은 기본적으로 youtube-dl을 설정하는 것입니다.
그러나 Android 12에서는 앱에서 시작한 분기된 자식 프로세스를 모니터링하고 앱이 백그라운드에 있는 경우( Mishaal Rahman을 통해 ) CPU를 너무 많이 소비하는 경우 해당 프로세스를 종료하는 메커니즘 이 도입되었음을 발견 했습니다 . 또한 상위 프로세스가 생성할 수 있는 하위 프로세스의 수를 32개로 제한하여 앱이 백그라운드에서 완료할 수 있는 작업의 수를 크게 제한합니다. 이 32개의 하위 프로세스 제한은 실제로 앱당이 아니라 전체 시스템에 걸쳐 있습니다. 즉, 하위 프로세스가 있는 다른 앱도 해당 제한에 기여할 것입니다. Google Pixel 6 Pro에서 테스트했으며 PhantomProcessKiller 가 존재하고 Termux에 잠재적으로 혼란을 일으킬 수 있음을 확인할 수 있습니다.
Android 12의 Phantom Process Killer는 백그라운드 프로세스를 종료합니다.
Android 12에는 백그라운드 프로세스에 대한 몇 가지 제한 사항이 도입되었습니다. 첫 번째는 상위 프로세스가 백그라운드에 있는 경우 백그라운드에서 너무 많은 CPU를 사용하는 앱의 하위 프로세스가 종료된다는 것입니다. 두 번째로 도입된 제한은 주어진 시간에 활성화될 수 있는 자식 프로세스의 수에 대한 제한입니다. (가)에서 역사를 커밋 , 구글이 악성 백그라운드 프로세스 단속하려고했던 것으로 생각된다.
“앱은 Runtime.exec()를 사용하여 자식 프로세스를 생성할 수 있으며 프레임워크는 수명 주기에 대해 전혀 모릅니다. 이제 프로세스를 찾을 때마다 추적하십시오. 현재 CPU 통계 샘플링 중에 발견될 수 있습니다. 상위 앱 프로세스가 백그라운드에 있는 동안 CPU를 너무 많이 사용하는 경우 종료합니다. 기본적으로 이러한 프로세스는 최대 32개까지 허용됩니다. 부모의 oom adj 점수가 가장 낮은 프로세스는 부모가 너무 많으면 종료됩니다."
물론 Android 스마트폰은 이미 백그라운드 앱 킬로 악명이 높습니다. 거의 모든 주요 OEM이 어떤 방식, 형태 또는 형태로 참여하고 있으며 OnePlus, Samsung 및 Xiaomi와 같은 회사 는 최악의 회사 로 간주됩니다 . AOSP에는 몇 가지 백그라운드 앱 제한 사항이 있지만 제조업체에서는 AOSP 위에 자체 제한 사항을 구축하는 것이 일반적입니다. 그러나 이는 고급 사용자에 대한 매우 엄격한 제한이며 고급 사용자가 오랫동안 음성적으로 반대해 온 행동을 조장합니다. 장기적으로 배터리 수명을 늘릴 수도 있지만 비활성화할 방법도 없는 것 같습니다.
Android 12 팬텀 프로세스 킬러 트리거
커밋에서 알 수 있듯이 이러한 프로세스는 32개 허용되며 Google Pixel 6 Pro에서 다음 명령으로 이를 확인했습니다.
adb shell "/system/bin/dumpsys activity settings"
이 명령의 출력에는 값이 32인 "max_phantom_processes"라는 상수가 있습니다. 이 컨텍스트에서 "팬텀 프로세스"는 Android 시스템에서 백그라운드에서 실행 중인 자식 프로세스로 판단됩니다. Android 12 장치가 있는 경우 Termux를 사용하여 저장소 어딘가에 다음 코드가 포함된 bash 스크립트를 만들고 실행하여 32개 이상의 하위 프로세스를 생성할 수 있습니다(Termux와 관련된 개발자 GitHub의 agnostic-apollo 에 대한 크레딧 ). :
for i in $(seq 40); do
sha256sum /dev/zero &
done
이를 실행하려면 Termux에서 스크립트를 저장한 폴더로 이동하고 다음을 입력합니다.
sh filename.sh
전화기가 느려지기 시작하면 작동하는 것입니다. 위의 코드는 /dev/zero 파일을 입력으로 사용 하여 백그라운드에서 40개의 sha256sum 작업(앰퍼샌드로 표시)을 생성합니다 . sha256sum은 입력으로 제공된 모든 파일의 SHA-256 해시를 제공합니다. /dev/zero 가 사용되는 이유 는 읽는 동안 null 값을 포함하는 무한 길이 파일이기 때문입니다. 즉, sha256sum 작업이 파일 끝에 도달하지 않아 백그라운드 작업.
몇 초에서 몇 분 후에 다음이 나타날 수 있습니다.
"signal 9"는 프로세스가 강제 종료하도록 보내는 신호이며 이 신호는 Linux 스케줄러에 의해 전송됩니다. 메시지가 나타나는 이유는 bash 터미널이 기술적으로 Termux의 자식 프로세스이기도 하고 Android 12가 위의 데모에서 bash 터미널을 종료하기 때문입니다. logcat 출력에서 다음을 볼 수 있습니다.
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {623260a 7362:7284:nightwatch.txt/u0a227}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {bf3d88c 24220:24040:nightwatch.txt/u0a237}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {b160bd5 27316:27269:bash/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {bbc1fea 27371:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {9cf12db 27372:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {54bf178 27373:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {fb89051 27374:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {d3450b6 27375:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {2a201b7 27376:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {60aad24 27377:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {124e08d 27378:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {32cc242 27379:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {b160bd5 27316:27269:bash/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {9cf12db 27372:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {414579a 27434:27269:top/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {32cc242 27379:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {bbc1fea 27371:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {bf3d88c 24220:24040:nightwatch.txt/u0a237} died
11-02 13:01:52.512 1444 1764 I ActivityManager: Process PhantomProcessRecord {60aad24 27377:27269:sha256sum/u0a340} died
11-02 13:01:52.516 1444 1764 I ActivityManager: Process PhantomProcessRecord {623260a 7362:7284:nightwatch.txt/u0a227} died
11-02 13:01:52.516 1444 1764 I ActivityManager: Process PhantomProcessRecord {124e08d 27378:27269:sha256sum/u0a340} died
11-02 13:01:52.517 1444 1764 I ActivityManager: Process PhantomProcessRecord {fb89051 27374:27269:sha256sum/u0a340} died
11-02 13:01:52.519 1444 1764 I ActivityManager: Process PhantomProcessRecord {54bf178 27373:27269:sha256sum/u0a340} died
11-02 13:01:52.532 1444 1764 I ActivityManager: Process PhantomProcessRecord {2a201b7 27376:27269:sha256sum/u0a340} died
11-02 13:01:52.545 1444 1764 I ActivityManager: Process PhantomProcessRecord {d3450b6 27375:27269:sha256sum/u0a340} died
중요한 라인은 "bash" 프로세스가 트리밍된 후 종료되었으며 이것이 Termux가 작동을 멈춘 이유라고 언급하는 라인입니다. "nightwatch.txt"가 무엇인지 확실하지 않지만 피상적인 Google 검색은 내가 설치한 두 개의 앱인 Facebook 및 Facebook Messenger와 관련이 있음을 시사하는 것으로 보입니다. 적응형 배터리를 끈 상태에서 테스트했으며 Termux에도 배터리 최적화가 적용되지 않았는지 확인했습니다.
테스트를 마친 후에도 일부 sha256sum 작업이 백그라운드에서 계속될 가능성이 높으므로(Enter 키를 누르면 Termux가 강제 종료됨) Termux를 다시 열고 다음을 입력합니다.
killall sha256sum
일부 앱에서는 이러한 제한이 이해가 되지만 고급 사용자가 사용하려는 경향이 더 높은 앱(예: Termux)은 어려움을 겪을 것입니다. 이는 Tasker와 같이 고급 사용자가 사용하는 다른 앱에도 영향을 미칠 수 있습니다. 이는 아직 극복할 수 없는 것으로 보이며 제조업체가 부과하는 다른 모든 독점 제한 외에도 백그라운드 앱에 더 많은 제한을 도입합니다. 진행중인 GitHub 문제 스레드에서 agnostic-apollo는 이메일로 받은 logcat과 관련하여 다음을 언급했습니다.
“추적된 32개의 logcat PhantomProcessRecord는 모두 com.wsandroid.suite에 속하며 termux의 bash는 죽은 프로세스 중 하나였습니다. 따라서 위에서 언급했듯이 32 프로세스 제한은 모든 앱을 결합한 것입니다.”
흥미롭게도 나는 Android 11을 실행하는 Xiaomi 11T Pro에서 동일한 테스트를 실행했으며 Xiaomi 장치가 백그라운드 앱 제한으로 악명 높지만 해당 구성의 특정 장치에는 동작이 존재하지 않음을 확인했습니다. 이것은 이상하게도 모든 Android 스마트폰에 도입된 가장 엄격한 백그라운드 애플리케이션 관리 정책 중 하나입니다. 방법이 없기 때문입니다. Xiaomi 장치 및 OnePlus 장치에서도 대부분 을 비활성화 할 수 있으며 일부 사람들에게는 해당 장치에서 모든 배터리 최적화를 비활성화하는 것으로 충분합니다. 반면에 팬텀 프로세스 킬러는 비활성화할 수도 없습니다.
많은 백그라운드 프로세스를 사용하는 많은 장치 내 작업에 Termux에 의존하는 경우 추가 정보가 나올 때까지 지금은 업그레이드를 보류하는 것이 좋습니다. 당신이 파워 유저가 아니라면, 이것은 당신이 정말로 걱정할 필요가 없는 것일 것입니다.