Android 12'nin yeni arka plan uygulama sınırlamaları uzman kullanıcılar için büyük bir baş ağrısı olabilir

Android 12'nin yeni arka plan uygulama sınırlamaları, Termux ve hatta Tasker gibi uygulamaları kullanan ileri düzey kullanıcılar için büyük bir baş ağrısı olabilir.

Android 12 pek çok değişiklik getirdi, ancak bunların hepsi gerçekten kullanıcıya yönelik değil. Yeniden tasarladığınız devasa Malzeme gibi özellikler açıkça yüzünüze çarpıyor ve gözden kaçırması zor, ancak buna benzer bir şey Dijital Araba Anahtarı desteğin gözden kaçırılması daha kolay olabilir. Bununla birlikte, tamamen belgelenmemiş bile olabilecek bir değişiklik, Termux gibi uygulamalara zarar verecektir ve bu, oldukça agresif bir arka plan süreç öldürücünün tanıtımıdır.

Bağlam açısından Termux, Android'de alabileceğiniz bir Linux terminal emülatörüdür ve Termux'un paket yönetimidir sistem, Debian'ın Gelişmiş Paket Aracına (APT) çok benzer; bu sayede arama yapabilir, kurabilir ve kaldırabilirsiniz. emretmek uygun. Termux, Play Store'daki APK boyutunu küçültmek için kutudan çıkan yalnızca birkaç temel paketi yükler, ancak şunları yapmanızı sağlar:

ekstra paketler yükleyin arzuladığın şey. İnsanlar genellikle eski akıllı telefonlarını mini sunuculara dönüştürmek için Termux'u kullanacak veya genellikle akıllı telefonlara yönelik olmayan diğer programları çalıştırmak için kullanacak. Akıllı telefonunuzda Termux'u kullanarak Python komut dosyalarını çalıştırabileceğiniz için youtube-dl'yi yerel olarak ayarlamak bile yaygın bir kullanımdır.

Ancak Android 12'de Keşfedildi Uygulamalar tarafından başlatılan çatallı alt işlemleri izleyen ve uygulama arka plandaysa (üzerinden) çok fazla CPU tüketirlerse onları öldüren bir mekanizma. Mişaal Rahman) tanıtılmıştı. Ayrıca ana süreçlerin oluşturabileceği alt süreçlerin sayısını 32 ile sınırlandırır; bu da bir uygulamanın arka planda tamamlayabileceği işlem sayısını büyük ölçüde sınırlar. Bu 32 alt süreç sınırı aslında yalnızca uygulama başına değil tüm sistem genelinde geçerlidir; bu, alt süreçleri olan diğer uygulamaların da bu sınıra katkıda bulunacağı anlamına gelir. Google Pixel 6 Pro'da test ettim ve şunu doğrulayabilirim: Phantom ProcessKiller mevcuttur ve potansiyel olarak Termux'a zarar verebilir.

Android 12'nin Phantom Process Killer'ı arka plan işlemlerini sonlandırıyor

Android 12, arka plan işlemlerine birkaç kısıtlama getirdi; Birincisi, arka planda çok fazla CPU tüketen uygulamaların alt süreçlerinin, ana süreç de arka planda olması durumunda sonlandırılacağıdır. Getirilen ikinci kısıtlama, herhangi bir zamanda aktif olabilecek alt süreçlerin sayısına ilişkin bir sınırdır. itibaren geçmişi işlemeGoogle'ın hileli arka plan işlemlerini engellemeye çalıştığı anlaşılıyor.

"Uygulamalar alt süreci oluşturmak için Runtime.exec() işlevini kullanabilir ve çerçevenin yaşam döngüsü hakkında hiçbir fikri olmayacaktır. Şimdi bu süreçleri bulduğumuzda takip edin; şu anda işlemci istatistikleri örneklemesi sırasında tespit edilebilirler. Ana uygulama süreci de arka plandayken çok fazla CPU tüketiyorsa onu sonlandırın. Varsayılan olarak bu tür en fazla 32 işleme izin veriyoruz; ebeveynlerinin en kötü oom adj puanına sahip olan süreç, eğer sayıları çok fazlaysa öldürülecektir."

Tabii ki, Android akıllı telefonlar zaten arka planda uygulama öldürme konusunda kötü bir şöhrete sahip. Hemen hemen tüm büyük OEM'ler bir şekilde, şekilde veya biçimde bu konuyla ilgilenmektedir ve şirketler OnePlus, Samsung ve Xiaomi en kötüler arasında sayılıyor. AOSP'nin bazı arka plan uygulama kısıtlamaları olsa da üreticilerin AOSP'nin üzerine kendi kısıtlamalarını oluşturması tipik bir durumdur. Ancak bunlar uzman kullanıcılar için oldukça katı sınırlamalardır ve uzman kullanıcıların uzun süredir açıkça karşı çıktığı davranışları teşvik eder. Belki uzun vadede pil ömrünü uzatacaktır, ancak görünüşe göre onu devre dışı bırakmanın da bir yolu yok.

Android 12 Phantom Process Killer'ı tetiklemek

Taahhüdün belirttiği gibi, bu tür 32 işleme izin veriliyor ve bunu Google Pixel 6 Pro'mda aşağıdaki komutla doğruladım.

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

Bu komutun çıktısında "max_phantom_processes" adında 32 değerinde bir sabit bulunmaktadır. Bu bağlamda, bir "hayalet süreç", Android sistemi tarafından arka planda çalışan bir alt süreç olarak değerlendirilmektedir. Android 12 cihazınız varsa Termux'u kullanarak 32'den fazla alt işlemi oluşturabilirsiniz. depolama alanınızda bir yerde aşağıdaki kodu içeren bir bash betiği oluşturmak ve onu yürütmek (krediler agnostik-apollo Termux'la ilgilenen bir geliştirici olan GitHub'da):

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

Çalıştırmak için Termux'ta betiği kaydettiğiniz klasöre gidin ve aşağıdakini yazın:

shfilename.sh

Telefonunuz yavaşlamaya başlarsa bu, çalıştığı anlamına gelir. Yukarıdaki kod, arka planda (ve işaretiyle gösterilir) 40 sha256sum işlemi başlatır. /dev/zero girdi olarak dosya. sha256sum, girdi olarak verilen dosyanın SHA-256 karmasını verecektir. Nedeni /dev/zero Bunun anlamı, okunduğu sürece boş değerler içeren sonsuz uzunlukta bir dosya olmasıdır. sha256sum işlemi hiçbir zaman dosyanın sonuna ulaşmayacak ve sürekli arka plan sağlamak için iyi bir stres testi görevi görecektir. operasyonlar.

Birkaç saniye ila bir dakika sonra aşağıdakilerin görünmesini sağlayabilirsiniz:

"sinyal 9", sürece gönderilen ve onu kapanmaya zorlayan bir sinyaldir ve bu sinyal Linux zamanlayıcı tarafından gönderilir. Mesajın ortaya çıkmasının nedeni, bash terminalinin teknik olarak Termux'un bir alt süreci olması ve Android 12'nin yukarıdaki gösteride bash terminalini öldürmesidir. Logcat çıktısında aşağıdakileri görebilirsiniz:

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

Önemli olan, "bash" sürecinin kesildiğini ve sonra öldüğünü ve bu nedenle Termux'un çalışmayı bıraktığını belirten satırdır. "Nightwatch.txt"nin ne olduğundan emin olmasam da, üstünkörü bir Google araması bunun yüklediğim iki uygulama olan Facebook ve Facebook Messenger ile ilgili olduğunu gösteriyor. Bunu uyarlanabilir pil kapalıyken test ettim ve Termux'a da pil optimizasyonunun uygulanmadığından emin oldum.

Testi bitirdikten sonra muhtemelen bazı sha256sum işlemleri devam edecektir. arka plan sabit (ve enter tuşuna basmak Termux'u kapatmaya zorlayacaktır), bu nedenle Termux'u yeniden açın ve şunu yazın: takip etme:

killall sha256sum

Böyle bir sınırlama bazı uygulamalar için anlamlı olsa da, uzman kullanıcıların kullanmaya daha yatkın olabileceği uygulamalar (Termux gibi) bundan zarar görecektir. Bu aynı zamanda ileri düzey kullanıcıların kullandığı Tasker gibi diğer uygulamaları da etkileyebilir. Bu, henüz üstesinden gelinmesi mümkün görünmeyen bir sınırlamadır ve üreticilerin dayattığı diğer tüm özel kısıtlamaların yanı sıra arka plan uygulamalarına daha da fazla sınırlama getirir. Devam eden GitHub sorunu başlığında, agnostik-apollo kendilerine e-postayla gönderilen bir logcat ile ilgili olarak aşağıdakilerden bahsediyor:

"32 izlenen logcat PhantomProcessRecord'un tamamı com.wsandroid.suite'e ait ve termux'un bash'ı öldürülen süreçlerden biriydi. Yukarıda belirtildiği gibi 32 işlem sınırı tüm uygulamaların birleşimi içindir"

Eğlenceli bir şekilde, aynı testleri Android 11 çalıştıran bir Xiaomi 11T Pro'da da yaptım ve bu davranışın mevcut olmadığını doğruladım. Xiaomi cihazları arka plan uygulamasıyla ünlü olsa da, söz konusu konfigürasyondaki söz konusu cihazda sınırlamalar. Garip bir şekilde bu, herhangi bir Android akıllı telefonda sunulan en katı arka plan uygulama yönetimi politikalarından biridir, çünkü bunun etrafından dolaşmanın bir yolu yoktur. Xiaomi cihazlarında ve OnePlus cihazlarında bile devre dışı bırakmak mümkündür en ve bazı insanlar için bu cihazlardaki tüm pil optimizasyonlarını devre dışı bırakmak onların mutlu olması için yeterlidir. Bunun aksine, hayalet süreç katili devre dışı bırakılamaz bile.

Birçok arka plan işlemi nedeniyle yoğun olan birçok cihaz içi işlem için Termux'a güveniyorsanız, daha fazla bilgi elde edilene kadar yükseltme işlemini şimdilik ertelemek faydalı olabilir. Uzman bir kullanıcı değilseniz, bu muhtemelen gerçekten endişelenmeniz gereken bir şey değildir.