Фіктыўнае месцазнаходжанне на Xiaomi: MIUI і HyperOS
Скарга «уключаю падмену, а праз пару хвілін усё вяртаецца» амаль заўсёды прыходзіць ад уладальнікаў Xiaomi, Redmi і POCO. Прычына не ў праграме: MIUI і HyperOS кіруюць фонавымі працэсамі строжэй за чысты Android і выгружаюць сэрвіс, які трымае падмену. Ніжэй — што менавіта адбываецца і якія тры налады гэта выпраўляюць.
Уключыце аўтазапуск для праграмы
Налады → Праграмы → Кіраванне праграмамі → Mock Location → «Аўтазапуск» (у некаторых версіях — «Праца ў фоне»). Гэта самая важная з трох налад: без яе пасля выгрузкі працэсу сістэма не падыме яго нанова, і падмена не адновіцца, пакуль вы не адкрыеце праграму ўручную.

Зніміце абмежаванні батарэі
На тым жа экране праграмы знайдзіце «Эканомія батарэі» або «Кантроль актыўнасці» і выберыце «Без абмежаванняў». У гэтым рэжыме прашыўка перастае ўсыпляць фонавы сэрвіс на свой погляд.

Замацуйце праграму ў нядаўніх
Адкрыйце спіс нядаўніх праграм і пацягніце картку Mock Location уніз — з'явіцца значок замка. Замацаваныя праграмы не закрываюцца пры ачыстцы спіса крыжыкам або свайпе «прыбраць усё».

Праверце, што падмена трымаецца
Уключыце падмену, згарніце праграму і пакіньце тэлефон у спакоі на дзесяць—пятнаццаць хвілін. Потым праверце: апавяшчэнне павінна застацца ў шторцы, а іншая праграма з картай — па-ранейшаму паказваць выбраную кропку.

Што адбываецца пад капотам
Прашыўка выгружае працэс праграмы — у сістэмных логах гэта відаць як прымусовае спыненне па рашэнні сістэмы. Пасля гэтага тэставыя правайдары застаюцца зарэгістраванымі ў Android з апошнім запісаным значэннем, але новыя каардынаты ў іх ніхто не піша: працэсу, які іх стварыў, ужо няма.
Звонку гэта выглядае як «падмена завісла»: каардыната тая ж, але перастае абнаўляцца, а праз нейкі час сістэма вяртае сапраўднае месцазнаходжанне.
Што праграма робіць сама
Два механізмы аднаўлення працуюць незалежна ад налад прашыўкі. Першы: пры адкрыцці праграма зверывае захаваны стан з фактычным і, калі працэс загінуў, вяртае падмену — гэты шлях спрацоўвае заўсёды. Другі: вартавы таймер перыядычна правярае стан у фоне і спрабуе падняць сэрвіс сам.
Але ў абодвух ёсць мяжа: калі прашыўка забараняе праграме стартаваць у фоне, вярнуць сэрвіс без вас нельга — код у гэты момант проста не выконваецца.
Чаму аўтазапуск важнейшы за астатнія налады
Розніца вымяральная. З выключаным аўтазапускам сістэма пасля выгрузкі працэсу зусім не перазапускае сэрвіс — аднаўленне адбываецца толькі тады, калі вы самі адкрыеце праграму. З уключаным аўтазапускам сістэма падымае выгружаны сэрвіс прыкладна за тры секунды, праграма падхоплівае захаваны стан і працягвае падмену без вашага ўдзелу.
Таму калі робіце толькі адну наладу з трох — рабіце аўтазапуск.
Аднаўленне пасля перазагрузкі
Актыўная падмена аднаўляецца аўтаматычна пры загрузцы тэлефона па самай ранняй сістэмнай падзеі — яшчэ да разблакіроўкі экрана. На тэлефоне з PIN-кодам гэта адзіны спосаб вярнуць падмену, не чакаючы, пакуль вы возьмеце тэлефон у рукі.
Замер на рэальнай прыладзе з HyperOS паказаў, чаму гэта важна: ранняя чарга падзей загрузкі даходзіць да праграмы крыху больш чым за секунду, а звычайная — за семнаццаць секунд, бо наперадзе ў чарзе сістэмны абнаўляльнік, воблачныя сэрвісы і банкаўскія праграмы.
Тыя ж налады на іншых абалонках
Падобныя паводзіны сустракаюцца на Huawei (Налады → Батарэя → Запуск праграм → выключыць аўтаматычнае кіраванне для праграмы), Samsung (Налады → Абслугоўванне прылады → Батарэя → Абмежаванні фонавай актыўнасці), OPPO, realme і vivo. Назвы адрозніваюцца, сэнс той жа: дазволіць праграме працаваць у фоне і выключыць яе з агрэсіўнай эканоміі батарэі. Калі падмена ўсё роўна злятае — разбор частых прычын.