Чому на Xiaomi підміна сама вимикається у фоні?
MIUI і HyperOS (Xiaomi, Redmi, POCO) вивантажують фонові застосунки агресивніше за інших. Увімкніть для Mock Location автозапуск і зніміть обмеження батареї — застосунок пропонує це під час першого запуску.
Підміну тримає фоновий сервіс, і «вимкнулася сама» майже завжди означає, що його закрила прошивка. У системних журналах це видно як примусову зупинку процесу системою, а не як помилку застосунку.
Далі відбувається неочевидне: тестові провайдери залишаються зареєстрованими в Android з останнім записаним значенням, але нові координати в них ніхто не пише — процесу, що їх створив, уже немає. Ззовні це виглядає як «підміна завмерла»: точка та сама, але перестає оновлюватися, а згодом система повертає справжнє місцезнаходження. Тому проблему часто помічають не відразу.
Найчастіше з цим стикаються власники Xiaomi, Redmi й POCO: MIUI і HyperOS керують фоновими процесами суворіше за інших. Лікується трьома налаштуваннями — автозапуск, зняття обмежень батареї й закріплення застосунку в недавніх; розбір із точними шляхами — в окремій інструкції для Xiaomi. Якщо робити лише одне з трьох — робіть автозапуск: без нього після закриття процесу система взагалі не поверне сервіс, і підміна не відновиться, доки ви самі не відкриєте застосунок. З увімкненим автозапуском система повертає сервіс за кілька секунд, застосунок підхоплює збережений стан і продовжує без вашої участі.
На Samsung причина та сама, але механізм називається «Сплячі застосунки»: One UI автоматично присипляє те, чим ви давно не користувалися, а застосунок підміни виглядає бездіяльним саме тоді, коли телефон лежить у кишені. Шляхи для One UI — в інструкції для Samsung. На Huawei й Honor вимкніть автоматичне керування запуском і ввімкніть усі три перемикачі — автозапуск, непрямий запуск і роботу у фоні; подробиці — в інструкції для Huawei.
Зі свого боку застосунок робить дві незалежні речі. Під час відкриття він звіряє збережений стан із фактичним і, якщо процес загинув, повертає підміну — цей шлях працює завжди. Крім того, сторожовий таймер періодично перевіряє стан у фоні й намагається відновити сервіс сам. Але в обох є межа: якщо прошивка забороняє застосунку запускатися у фоні, сервіс без вас не повернути — код у цей момент просто не виконується. Тому налаштування прошивки програмно не замінити.
Простіше за все перевірити результат за постійним сповіщенням у шторці: поки воно є, сервіс живий. Якщо зникло — система все-таки до нього дісталася, і варто повернутися до налаштувань вище.