Android 12의 새로운 백그라운드 앱 제한은 고급 사용자에게 큰 골칫거리가 될 수 있습니다.

Android 12의 새로운 백그라운드 앱 제한은 Termux 및 심지어 Tasker와 같은 앱을 사용하는 고급 사용자에게 큰 골칫거리가 될 수 있습니다.

안드로이드 12 많은 변경 사항이 도입되었지만 실제로는 모든 변경 사항이 사용자에게 직접 적용되는 것은 아닙니다. 당신이 재설계한 대규모 머티리얼과 같은 기능은 분명히 눈앞에 와닿아서 놓치기 어렵지만 다음과 같은 것입니다. 디지털 자동차 키 지원을 놓치기 쉬울 수도 있습니다. 그러나 완전히 문서화되지 않은 한 가지 변경 사항은 Termux와 같은 앱에 큰 타격을 줄 수 있으며, 이는 매우 공격적인 백그라운드 프로세스 킬러의 도입입니다.

문맥상 Termux는 Android에서 얻을 수 있는 Linux 터미널 에뮬레이터이며 Termux의 패키지 관리는 시스템은 다음을 사용하여 검색, 설치 및 제거할 수 있다는 점에서 데비안의 APT(Advanced Package Tool)와 매우 유사합니다. 명령 적절한. Termux는 Play 스토어의 APK 크기를 줄이기 위해 기본적으로 몇 가지 기본 패키지만 설치하지만 다음을 수행할 수 있습니다. 추가 패키지 설치 당신이 원하는 것. 사람들은 종종 Termux를 사용하여 구형 스마트폰을 미니 서버로 바꾸거나 일반적으로 스마트폰을 대상으로 하지 않는 다른 프로그램을 실행하는 데 사용합니다. 스마트폰에서 Termux를 사용하여 Python 스크립트를 실행할 수 있으므로 일반적인 사용법은 youtube-dl을 기본적으로 설정하는 것입니다.

하지만 Android 12에서는 그것은 발견되었다 앱에서 시작된 포크된 하위 프로세스를 모니터링하고 앱이 백그라운드에 있는 경우 너무 많은 CPU를 소비하는 경우 해당 프로세스를 종료하는 메커니즘입니다. 미샤알 라만)을 소개했습니다. 또한 상위 프로세스가 생성할 수 있는 하위 프로세스 수를 32개로 제한하므로 앱이 백그라운드에서 완료할 수 있는 작업 수가 크게 제한됩니다. 이 32개의 하위 프로세스 제한은 실제로 앱별이 아니라 전체 시스템에 적용됩니다. 즉, 하위 프로세스가 있는 다른 앱도 해당 제한에 영향을 미칩니다. Google Pixel 6 Pro에서 테스트한 결과,

PhantomProcessKiller 존재하며 잠재적으로 Termux를 혼란에 빠뜨릴 수 있습니다.

Android 12의 Phantom Process Killer는 백그라운드 프로세스를 종료합니다.

Android 12에는 백그라운드 프로세스에 대한 몇 가지 제한 사항이 도입되었습니다. 첫 번째는 백그라운드에서 너무 많은 CPU를 소비하는 앱의 하위 프로세스가 상위 프로세스도 백그라운드에 있으면 종료된다는 것입니다. 두 번째 제한 사항은 특정 시간에 활성화될 수 있는 하위 프로세스 수에 대한 제한입니다. 로부터 커밋 기록, Google이 악성 백그라운드 프로세스를 단속하려고 시도한 것으로 보입니다.

"앱은 Runtime.exec()를 사용하여 하위 프로세스를 생성할 수 있으며 프레임워크는 해당 수명 주기에 대해 전혀 모릅니다. 이제 해당 프로세스를 찾을 때마다 추적하십시오. 현재 CPU 통계 샘플링 중에 해당 프로세스를 발견할 수 있습니다. 상위 앱 프로세스도 백그라운드에 있는 동안 CPU를 너무 많이 소비하는 경우 해당 앱을 종료하세요. 기본적으로 이러한 프로세스는 최대 32개까지 허용됩니다. 부모의 oom adj 점수가 가장 낮은 프로세스는 부모가 너무 많으면 종료됩니다."

물론 안드로이드 스마트폰은 이미 백그라운드 앱 킬링으로 악명 높습니다. 거의 모든 주요 OEM이 어떤 방식, 형태, 형태로든 이에 참여하고 있으며 다음과 같은 회사는 OnePlus, Samsung 및 Xiaomi는 최악의 것으로 간주됩니다.. AOSP에는 몇 가지 백그라운드 앱 제한 사항이 있지만 제조업체에서는 AOSP 위에 자체 제한 사항을 구축하는 것이 일반적입니다. 그러나 이는 파워 유저에 대한 매우 엄격한 제한 사항이며 파워 유저가 오랫동안 반대해온 행동을 장려합니다. 장기적으로 보면 배터리 수명이 늘어날 수도 있지만 비활성화할 방법은 없는 것 같습니다.

Android 12 Phantom Process Killer 트리거

커밋에 따르면 이러한 프로세스는 32개 허용되며 Google Pixel 6 Pro에서 다음 명령을 사용하여 이를 확인했습니다.

adb shell "/system/bin/dumpsys activity settings"

이 명령의 출력에는 값이 32인 "max_phantom_processes"라는 상수가 있습니다. 이러한 맥락에서 "팬텀 프로세스"는 Android 시스템에서 백그라운드에서 실행되는 하위 프로세스로 판단됩니다. Android 12 기기가 있는 경우 Termux를 사용하여 다음을 통해 32개 이상의 하위 프로세스를 생성할 수 있습니다. 다음 코드를 포함하는 저장소 어딘가에 bash 스크립트를 생성하고 실행합니다. (크레디트 불가지론자-아폴로 Termux와 관련된 개발자인 GitHub에서):

for i in $(seq 40); do
sha256sum /dev/zero &
done

이를 실행하려면 Termux에서 스크립트를 저장한 폴더로 이동하여 다음을 입력하십시오.

shfilename.sh

휴대전화가 느리게 느껴지기 시작하면 휴대전화가 작동하고 있다는 의미입니다. 위 코드는 백그라운드에서 40개의 sha256sum 작업을 생성합니다(앰퍼샌드로 표시됨). /dev/zero 파일을 입력으로 사용합니다. sha256sum은 입력으로 제공된 모든 파일의 SHA-256 해시를 제공합니다. 이유 /dev/zero 사용되는 것은 읽는 동안 null 값을 포함하는 무한 길이의 파일이라는 것입니다. sha256sum 작업은 파일 끝에 도달하지 않으므로 지속적인 배경을 보장하는 좋은 스트레스 테스트 역할을 합니다. 운영.

몇 초에서 몇 분 후에 다음이 나타날 수 있습니다.

"신호 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를 사용하는 경우 더 많은 정보가 나올 때까지 지금은 업그레이드를 보류하는 것이 좋습니다. 고급 사용자가 아니라면 이는 실제로 걱정할 필요가 없는 문제일 가능성이 높습니다.