Чи існує спосіб назавжди вимкнути Карти Google до необхідності?


24

Здається, на картах Google є зареєстрована шалена кількість Інтентів, а також інші способи їх запуску.

Оскільки це дуже придатний для голодування ресурс (особливо мудрий для пам’яті), я б дуже хотів, щоб він постійно не працював, якщо / поки мені це справді не потрібно. Однак Android постійно запускає його постійно - наприклад, коли змінюється стан підключення (що для мене трапляється досить часто в приміщенні) або змінюється розташування GPS / мережі.

Чи є якийсь спосіб гарантувати, що Карти Google не запускають жодних процесів, гарантовано, поки я не натисну піктограму, щоб навмисно її запустити?

Навколишнє середовище : Droid X, працює з укоріненим запасом Froyo 2.2; У мене є Автостарти . та Advanced Task Killer, а також встановлена ​​Pro версія Titanium Backup.

Я досить відкритий майже до будь-якого методу, поки

  • Це надійно.

  • Це дозволяє мені використовувати Карти Google зі стовідсотково призначеною функціональністю, як тільки мені це потрібно, не вимагаючи 5 хвилин роботи для повторної настройки.

  • В ідеалі не потрібно, щоб я перезавантажувався, щоб використовувати його, але цей не є вбивцею угоди.

  • Я б хотів віддати перевагу універсальному методу, який застосовуватиметься до інших програм, а не лише до Google Maps.

  • Я розробник програмного забезпечення з величезною дозою досвід роботи в системі Unix / Linux. Іншими словами, рішення, які потребують підказок оболонки або написання / запуску скриптів оболонки (або Perl в Android Scripting Environment), надзвичайно вітаються.

    Рішення, пов’язані з написанням мого власного додатка Java для Android, прийнятні, якщо вони досить деталізовані, ніж загальний розробник Android, може отримати хоч якусь роботу, не втративши на 100%.

Те, що я спробував:

  • Убивання процесів за допомогою вбивці завдань НЕ працює - вони повертаються назад або відразу, або за короткий час. Можливо, через Інтенти, але не на 100% визначено.

  • Стандартні методи позбавлення від проблем GMaps (вийдіть із програми Latitude / вимкніть GPS та мережевий локатор). Це, здається, дуже допомагає, Але я вважаю, що необхідність назавжди вимкнути GPS / локатор є неприйнятною - наприклад, це не дозволить мені запустити додаток Locale або речі, які базуються на локальній роботі.

  • Заморозьте за допомогою Titanium Backup Pro. Це вимагає перезавантаження і взагалі не дуже приємно.

Можливі підходи, які я придумав (але не знаю, як це зробити):

  • Якось ПОЛУЧНО усуньте (вимкніть) усі інтенти, зареєстровані на Картах Google, коли це не потрібно.

    Проблеми: По-перше, я не знаю, для чого використовуються ВСІ інтенти Google Maps.

    По-друге, єдиний практичний спосіб зробити це, про що я знаю, це додаток Autostarts, яке НЕ є прийнятним рішенням - для пошуку та повторного ввімкнення всіх мені відомих намірів потрібно ~ 5-10 хвилин (Автозапуск дійсно поганий -app управління намірами - орієнтоване на намір), не майте на увазі можливих намірів, про які Autostarts НЕ знає (це чорна скринька, я не знаю, які наміри пропущені, якщо такі є.

  • У вас є сценарій, який буде перейменовувати JAR або будь-які виконувані файли на Android (цілі .APK?) Від скажу GoogleMaps.apkдо GoogleMaps.disabled.apkі назад.

    Проблема: я не знаю, чи можна це зробити на укоріненому Фройо. Також Карти Google були попередньо встановлені на DroidX, так чи перейменування якось вплине ТІЛЬКИ на оновлення, але не на оригінальний додаток?

  • Майте сценарій, який перейде в APK і перейменує / перемістить / порожній файл маніфесту, щоб видалити будь-які наміри цього додатка.

    Проблема: Для цього потрібна перекомпіляція? Це безумовно вимагає перезавантаження, що є мінусом


2
Зауважте, що я запитую "Чи існує спосіб назавжди вимкнути Карти Google до необхідності?". Я не запитую "Чи потрібно назавжди зупиняти запуск Карт Google?" Або "Які способи вирішити, щоб продовжувати працювати GMaps та продовжувати довго працювати від акумулятора".
DVK

"Заморозити за допомогою Titanium Backup Pro. Це вимагає перезавантаження та, як правило, не дуже приємно." Це цікаво. Це робиться для всіх додатків або просто щось більш вбудоване, як-от Карти?
Шанс

@Chance - Моє враження було, що це для всіх додатків.
DVK

3
Ви насправді пробували? Раніше я використовував Ti-Bu для заморозки програм, і мені не довелося перезавантажувати.
Шанс

@Chance - Мої програми, які я заморозив, не припиняли повторного нерестування в пам'яті, поки я не перезавантажився. Можливо, я робив це неправильно - я почав використовувати TBPro лише нещодавно.
DVK

Відповіді:


5

З вашої згадки про Titanium Backup, я припускаю, що ваш пристрій вкорінений. Тому моя абсолютна рекомендація тут - AutoRun Manager (і так, вам знадобиться Pro - друге так, воно того варте). Установивши це, відкрийте додаток, використовуйте «розширений режим», шукайте додаток, який ви хочете змінити (у вашому випадку: Карти Google). Розгорніть його. ARM покаже вам усіх його слухачів - відключіть їх.

Це воно. Ніщо не прокидає його більше, якщо явно не розпочати його. АЛЕ: Перш ніж його запустити, можливо, вам доведеться знову включити цих слухачів, або у вас можуть виникнути дивні побічні ефекти (я це зробив). З іншого боку, принаймні для цього не потрібно перезавантаження.

Щоб отримати технічні деталі, ви можете перехрестити відповідь на питання, як я можу керувати асоціаціями намірів із програмами або безпосередньо зануритися в розділ «Інтенції» в посібниках для розробників AOSP .


16

По-перше, я пропоную вам припинити використання вбивць завдань . Вони виснажують вашу батарею більше, ніж економлять її. Система перезапускає послуги, коли їх потрібно запустити, що спричиняє заряд батареї.

По-друге, ви вважаєте, що звільнити пам'ять - це добре. Це не так. Звільнення пам'яті не зменшить витрату акумулятора. Насправді потрібно шукати програми, які використовують багато циклів процесора. Це те, що розрядить ваш акумулятор.

Android базується на Linux. Linux завжди хоче використовувати всю наявну пам’ять, оскільки вільна пам'ять витрачається на марну пам'ять. Система android подбає про звільнення пам'яті додатків, які не використовуються, щоб інші програми могли використовувати її за потреби.

Навіть якщо ви спробуєте вбити додатки, які працюють та займають пам'ять, система або перезапустить ці служби / додатки, що спричинить розрядку акумулятора, оскільки вони, ймовірно, синхронізуються при запуску, або просто цикли процесора, які використовуються ініціалізувати додаток. Убивання програм також призведе до того, що при спробі запуску програм пристрій з’явиться повільним, тому що щось, що зазвичай може працювати зараз, потрібно запустити до створення резервного копіювання, перш ніж представити інтерфейс користувача.

Деякі речі, які спричинить заряд батареї, наприклад, GPS, Wi-Fi, Bluetooth та використання даних, будуть використовувати ваш процесор набагато більше для обробки даних, що передаються та отримуються. Якщо вимкнути їх, якщо вони не використовуються, це дозволить заощадити багато акумулятора. У мене поганий акумулятор на пристрої, він навіть не заряджає 94%, але я можу отримати 12 або більше годин від свого акумулятора, якщо вимкну ці сервіси, коли вони мені не потрібні.

Я постійно використовую Google Maps, і в моїй батареї статистика його навіть не вказана як додаток, що використовує ресурси. Мій найвищий користувач акумулятора - Екран @ 31%, а найнижчий показник - GMail @ 3%. Можу запевнити, що Google Maps не є причиною розряду акумулятора. Використання вбивць завдань скоріше є причиною. Як я вже говорив, я майже щодня використовую карти Google для вказівки, і це навіть не в топ-10 списку програм, які використовують мою батарею.

Більше інформації про вбивць завдань із блогу розробників Google Android .

Поширене непорозуміння щодо багатозадачності Android - це різниця між процесом та програмою. В Android це не тісно пов'язані об'єкти: програми можуть здаватися користувачеві без фактичного процесу, на якому зараз запущено додаток; кілька додатків можуть обмінюватися процесами, або одна програма може використовувати декілька процесів залежно від її потреб; процес програми можна підтримувати в Android, навіть коли ця програма активно не робить щось.

Той факт, що ви можете бачити процес роботи програми "не працює", не означає, що програма працює або робить щось. Це може бути просто там, тому що Android потрібен був у якийсь момент, і вирішив, що найкраще буде тримати його на випадок, якщо він знову потребує. Так само ви можете залишити додаток на трохи і повернутися до нього з місця, де ви зупинилися, і за цей час Android, можливо, знадобився б позбутися процесу для інших речей.

Ключовим чином, як Android обробляє програми таким чином, є те, що процеси не закриваються чисто. Коли користувач залишає додаток, його процес зберігається у фоновому режимі, що дозволяє йому продовжувати працювати (наприклад, завантажувати веб-сторінки), якщо потрібно, і негайно виходити на перший план, якщо користувач повернеться до нього. Якщо пристрою ніколи не вистачає пам’яті, Android підтримуватиме всі ці процеси навколо, по-справжньому залишаючи всі програми «працюючими» весь час.

Звичайно, пам'ять є обмеженою, і для розміщення цього Android необхідно вирішити, коли позбутися процесів, які не потрібні. Це призводить до життєвого циклу процесів Android, правил, які він використовує, щоб вирішити, наскільки важливим є кожен процес, і, отже, наступний, який слід скинути. Ці правила ґрунтуються як на тому, наскільки важливий процес для поточного досвіду користувача, так і на те, як тривало це з часу останнього необхідного користувачеві процесу.

Після того, як Android визначить, що йому потрібно видалити процес, він робить це жорстоко, просто змушує його вбивати. Потім ядро ​​може негайно повернути всі ресурси, необхідні процесу, не покладаючись на те, що ця програма добре написана та відповідає на ввічливий запит на вихід. Дозвіл ядра негайно повернути ресурси додатків значно спрощує уникнення серйозних ситуацій із пам'яттю.

Якщо пізніше користувач повернеться до вбитої програми, Android потребує способу його повторного запуску в тому ж стані, як він був останній раз, щоб зберегти досвід "усі програми працюють весь час". Це робиться шляхом відстеження частин програми, про яку користувач знає (Дії), і повторного запуску з інформацією про останній стан, в якому вони бачилися. Цей останній стан формується кожного разу, коли користувач залишає цю частину програми, а не тоді, коли воно вбито, так що ядро ​​може згодом вільно його знищувати, не залежно від того, програма додатково відповість у цей момент.

Деяким чином управління процесами Android можна розглядати як форму простору обміну: процеси застосувань представляють певний об'єм пам'яті, що використовується; коли пам’яті мало, деякі процеси можуть бути вбиті (замінені); коли ці процеси знову потрібні, їх можна буде запустити з останнього збереженого стану (замінено).

Ось ще одна стаття, яка розповідає про те, як вбивці завдань розрядять ваш акумулятор.

Не використовуйте програмне забезпечення
для автоматичного вбивства завдань. Щоб зробити короткий короткий опис, використання вбивць з автоматичним завданням може призвести до: надмірного розряду акумулятора (як якщо телефон вже не швидко розряджає акумулятор), телефон часто перегрівається і програми вимикаються. (збій) випадковим чином - програми, які ви насправді хочете використовувати. Не тримайтеся подалі від цих!

Одне, що ви можете зробити, якщо ви дійсно встановлені на "зупинці карт", поки ви не хочете його використовувати, - це використовувати варіант Freeze в титановому резервному копії. Це фактично видалить додаток з пристрою, і жодна з пов’язаних з ним служб не запуститься, поки ви не скасуєте його.


1
звільнення пам’яті забирає мій Droid X від надзвичайно повільного повзання з ~ 30-40 МБ вільного до розумного реагування та швидкого з> 70 Мб вільного, без додатків, що притискають процесор до будь-якого випадку. Вибачте, але це приємна теорія, яка просто НЕ застосовується на практиці.
DVK

Крім того, коли менеджер пам’яті Android вбиває мій веб-браузер, втрачаючи ВСІ мої відкриті вкладки, щоб звільнити простір для Google Maps, це є великим досягненням продуктивності.
DVK

4
Я кажу вам, що ви відчуваєте, це ефект плацебо. вільна пам'ять не змушує ваш пристрій працювати швидше, безкоштовний процесор. Я включив для вас ще одне посилання на тему вбивць завдань (справа від google)
Райан Конрад

2
Використання вбивці завдань призведе до зливу, і я пояснив, чому у своїй відповіді. Крім того, якщо ви прочитаєте всю відповідь, я даю точну відповідь на вашу проблему використання титану, заморозивши додаток.
Райан Конрад

3
@Chance ні, тому що якщо ви вб'єте процес, який насправді не працює, система, врешті-решт, повинна буде запустити цей процес резервного копіювання, і він зробить "всю його ініціалізацію", яка буде використовувати ЦП. Просто те, що процес запущений, не означає, що він насправді робить щось на той час.
Райан Конрад

11

Чи думали ви про видалення та повторну інсталяцію Карт як можливого рішення?

  1. Спочатку позбудьтесь попередньо завантажених карт, видаливши /system/app/Maps.apkфайл:

    su  
    rm /system/app/Maps.apk
    

    Після оновлення системного додатка він буде марний у папці / system / app і його можна безпечно видалити.

  2. Потім скопіюйте поточну версію Карт на SD-карту:

    cp /data/app/com.google.android.apps.maps*.apk /sdcard/
    
  3. Тепер видаліть додаток Карти:

    pm uninstall -k com.google.android.apps.maps
    

    Перемикач "-k" зберігає налаштування під час перевстановлення програми.

  4. Тепер, щоб повернути Карти, просто перевстановіть її із резервної копії:

    pm install -r /sdcard/com.google.android.apps.maps*.apk
    

Ви можете автоматизувати ці кроки за допомогою GScript , що дозволяє створювати ярлики до сценаріїв. Тому просто створіть один сценарій під назвою "Вимкнути карти" із командою з кроку №3 та інший під назвою "Увімкнути Карти" із командою з кроку №4 (встановіть прапорець "Потрібно СУ?" Для обох).

Тепер ви можете додати 2 ярлики GScript на свій головний екран із створених сценаріїв, використовуючи звичайний метод Android "Додати ярлик" (GScript буде одним із варіантів.)

Єдиним недоліком цього методу є те, що ви, швидше за все, втратите ярлик Карти (та / або віджет) на головному екрані, коли ви його видалите, вимагаючи повторного додавання після повторної інсталяції. Звичайно, ви все одно зможете запустити Карти з ящика додатків.


Чи негативно вплине на цю процедуру той факт, що Карти були попередньо встановлені на моєму DroidX? Або цього не було в ПЗУ? +1 за відмінну ідею!
DVK

2
Якщо спочатку ви не видалите системну версію APK, видалення не вдасться. Як правило, щойно системна програма отримує оновлення з Market, її відповідну APK файл / system / app / folder можна сміливо видалити.
Чах

1
@Chank - Я припускаю, що, оскільки це не програмне забезпечення Verizon, я фактично маю доступ до видалення системної версії, доки я отримав root? :)
DVK

1
Поки ваш телефон укорінений, у вас не повинно виникнути проблем із видаленням Maps.apk з / system / app.
Чах

2

Починаючи з сендвіч-морозива Android 4.0, ви можете просто відключити Карти Google у налаштуваннях системи . Це не допоможе вам, якщо ви все-таки затримаєтесь на Froyo, але інші можуть отримати від цього певну користь.


Чи відключає всі пов’язані служби? (GM та Latitude тощо)?
DVK

Він повністю відключає це додаток, включаючи все, що він приносить. Наскільки я можу сказати, це включає Навігацію, Широту тощо.
Майкл Хемптон

1

Я пропоную використовувати Заморозити особливість Titanium резервного домашнього ринку зв'язку . Я вважаю, що вам потрібно зареєструвати додаток (6,58 долара), щоб скористатися цією функцією, але я запевняю, що це варто, якщо ви хочете зламати телефон. Інша основна причина оплати за додаток (крім підтримки розробника для написання дрібного вільного програмного забезпечення) - це можливість робити пакетні встановлення (тобто відновлення з резервного копіювання) додатків і даних, які ви створили резервну копію. Інакше вам доведеться пройти стандартні діалогові вікна встановлення додатків.

З веб-сайту про заморожування:

Морозильник додатків може вимкнути додаток (і зробити його невидимим), не видаляючи його

Або ви дійсно можете видалити та перевстановити. Ви можете виявити, що є причини для заморожування, я не знаю.


Вибачте, але це не корисно. У моєму запитанні в розділі "Речі, які я спробував", пункт № 3: "Заморозити через Titanium Backup Pro. Це вимагає перезавантаження та, як правило, не дуже приємно".
DVK

0

Якщо у вашого телефону є така можливість Settings > Applications > Development > Stop app via long-press, ви завжди можете закрити Карти Google таким чином, і цей процес також буде вбитий, поки ви знову не відкриєте додаток.


-1

Викорініть свій телефон, а потім скористайтеся програмою AutoStarts з Google Play, щоб відключити всі події, які викликають Карти. Він буде працювати нормально, коли буде запущено вручну, але не залишиться, коли ви його вб'єте. Відключіть все, що вам не потрібно, у папці "Після запуску", щоб зменшити споживання пам'яті.


1
Ви уважно читали питання? У ньому прямо вказано:Second, the only practical way of doing that that I know of is Autostarts app which is NOT a workable solution - it takes ~5-10 mins to find and re-enable all the intents I am aware of (Autostarts is really poor at per-app intent management - it's centered on per-intent), never mind possible intents that Autostarts does NOT know about (it's a black box, I don't know which intents are missed if any.
DVK
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.