×

Когда экран застыл: оживляем смартфон

Иногда дисплей не откликается ни на прикосновения, ни на аппаратные кнопки. Карманный «микро-центр» остаётся живым: ядра крутятся, датчики шлют телеметрию, а графический стек SurfaceFlinger молчит. Причина — залипший процесс, гонка за ресурс, редкий баг прошивки. Я выхожу из ситуации по шагам.

зависания

Причины ступора

Обычно реакция пропадает из-за ненасытного приложения, поймавшего dead-loop. Ядра тратят так ты впустую, планировщик CFS выстраивает очередь, Watchdog-таймер уже перемигивается, но перезагрузки ещё нет. Картину усугубляют:

• нагрев, поднимающий частоты ближе к троттлингу,

• битый блок eMMC, где система ждёт отклика дольше тайм-аута,

• ловушка в драйвере GPU, оставившая поток в spinlock.

В отчёте logcat такая сцена выглядит как «InputDispatcher timeout» плюс «binder: undelivered transaction».

Быстрая перезагрузка

Первое средство — жёсткий сброс. У большинства моделей — удержание Power + Volume-Down от восьми секунд до вибрации. В этот момент микроконтроллер PIC обнуляет линии питания, ядро стартует заново, данные в UFS не страдают. На старых MediaTek подойдёт Power + Volume-Up, на Samsung — «тройка» Power + Volume-Down + Home. Если клавиши не срабатывают, выдёргиваю кабель аккумулятора — крайний вариант, так как размыкается BMS-датчик и прошивка «забывает» цикла зарядов.

Экстренная чистка кэша

После перезапуска открываю инженерное меню Recovery. Вход: Power + Volume-Up до логотипа. Команда «wipe cache partition» удаляет лишь временные журналы Dalvik/ART, сохраняя фотографии и контакты. При этом NV-разделы остаются нетронутыми, FRP-метка не сбрасывается. На Google A/B-схемах аналог — «adb reboot fastboot» и «fastboot erase cache».

Глубокая диагностика

Если зависание регулярно возвращается, запускаю Systrace: «adb shell perfetto -o /sdcard/trace». Файл .c trace загружает интерфейс Perfetto UI, где видно, какой поток занял CPU, а какой ожидает sem_wait. Для анализа памяти использую «dumpsys meminfo», строка «OOM adj» выше 10 намекает на жертву грядущего убийства OOM-killer’ом. Купленный через маркет VPN порой оставляет tun-интерфейс в состоянии FIN_WAIT2 — ещё один повод кристаллизовать интерфейс.

Профилактика

• Удаляю из автозапуска всё, что разгоняет сервисы до 100 % wakelock.

• Обновляю прошивку ради свежих патчей ядра и обновлённого zRAM-алгоритма LZ4HC.

• * Слежу за температурой: при 43 °C и выше наступает flight-throttle, UI дёргается.

• Оставляю свободными 15 % флеш-тома — wear-leveling быстрее ищет чистые блоки.

• * С использованием банковских клиентов включая Selinux Enforcing, audit=1 в dmesg гарантирует отчёт об отклонённой политике, вместо молчаливой блокировки.

Когда ничего не помогает

При циклическом фризе после логотипа подключаю смартфон к ПК, запускаю «adb reboot bootloader», прошиваю оригинальный образ system.img через «fastboot flash system». Если раздел GPT повреждён, восстанавливаю его с помощью «fastboot flash partition gpt.bin». В случае гибридной платёжки eSIM не теряется: профиль хранится в eUICC, прошивка Radio его не затирает. После восстановления проверяю сенсоры через «*#0*#» или «cit». Оставшийся артефакт на экране укажет на физическую неисправность PMOLED.

Слово напоследок

Зависание напоминает ледостав: сверху ровный покров, под которым шевелится вода процессов. Моя задача — аккуратно проломить корку и вернуть течение, не разлив реку данных. При соблюдении шагов выше смартфон оживает так же уверенно, как кварцевые часы после замены батарейки.