有没有办法在需要之前永久关闭Google地图?


24

Google地图似乎为其注册了大量的Intent,以及其他启动方式。

由于这是一个非常耗资源的应用程序(尤其是内存方面的应用程序),所以我非常希望它永久不运行,除非/直到我真正需要它为止。但是,Android会一直保持启动状态-例如,当连接状态发生变化(对我来说这在室内经常发生)或GPS /网络位置发生变化时。

有什么方法可以确保Google Maps在我单击有意启动图标之前不会启动任何进程?

环境:Droid X,运行根目录Froyo 2.2;我有自动启动。和Advanced Task Killer,以及安装专业版的Titanium Backup。

只要任何方法,我都相当开放

  • 很可靠

  • 它使我在需要时可以使用具有100%预期功能的Google Maps,而无需进行5分钟的重新配置。

  • 理想情况下,不需要我重新启动即可使用它,但这不是交易杀手。

  • 我强烈希望使用一种通用方法,该方法将适用于其他应用程序,而不仅仅是Google Maps。

  • 我是一位具有大量Unix / Linux系统管理经验的软件开发人员。换句话说,非常需要需要shell提示或编写/运行shell脚本(或Android Scripting Environment中的Perl)的解决方案。

    涉及编写我自己的Java Android应用程序的解决方案是可以接受的,只要它们的详细程度足以使一个新的Android开发新手可以完成至少一些工作而不会100%丢失。

我尝试过的事情:

  • 通过Task Killer杀死进程无法正常工作-它们立即或短时间恢复。可能通过Intents,但不是100%确定。

  • 摆脱GMaps问题的标准方法(退出“谷歌纵横” /关闭GPS和网络定位器)。这似乎有很大帮助,但是我发现需要永久关闭GPS /定位器是不可接受的-例如,它不允许我运行Locale应用程序或基于Locale的Tasker。

  • 通过Titanium Backup Pro冻结。这需要重新启动,并且通常不是很愉快。

我想到的可能方法(但不知道如何做)是:

  • 以某种方式完全消除(关闭)不需要时由Google Maps注册的所有Intent。

    问题:首先,我不知道Google Maps使用的所有Intent。

    其次,我知道的唯一实用的方法是Autostarts应用程序,它不是可行的解决方案-大约需要5-10分钟才能找到并重新启用我所知道的所有意图(Autostarts确实很差-app意图管理-以每个意图为中心),不用担心自动启动不知道的可能意图(这是一个黑匣子,我不知道会丢失哪些意图)。

  • 有一个脚本,将重命名的JAR文件或任何Android手机上的可执行文件(整个.apk文件?)比如从GoogleMaps.apkGoogleMaps.disabled.apk和背部。

    问题:我不知道是否可以在扎根的Froyo上执行此操作。此外,Google Maps已预先安装在DroidX上,因此重命名只会以某种方式影响更新,而不会影响原始应用程序吗?

  • 有一个脚本,它将进入APK并重命名/移动/清空清单文件,以删除该应用程序的所有意图。

    问题:是否需要重新编译?绝对需要重新启动,这是一个负号


2
请注意,我在问“是否有办法在需要之前永久关闭Google地图?”。我不是在问“我需要永久停止启动Google Maps吗?”或“什么是可以继续运行GMaps并保持良好电池寿命的解决方法”。
DVK'2年

“通过Titanium Backup Pro冻结。这需要重新启动,并且通常不太愉快。” 那很有意思。它是否适用于所有应用程序,或者仅适用于诸如Maps之类的嵌入式应用程序?
2012年

@Chance-我的印象是它适用于所有应用程序。
DVK'2

3
您是否真的尝试过?我以前使用Ti-Bu冻结应用程序,而不必重新启动。
2012年

@Chance-我冻结的应用程序直到重新启动后才停止重新生成到内存中。可能是我做错了-我最近才开始使用TBPro。
DVK '02

Answers:


5

根据您提到的Titanium Backup,我认为您的设备已经植根。因此,我在这里的绝对推荐是AutoRun Manager(是的,您将需要Pro-第二个,这是值得的)。安装后,打开应用程序,使用“高级模式”,查找要修改的应用程序(在您的情况下:Google Maps)。展开它。ARM将向您显示其所有侦听器-禁用它们。

而已。除非您明确启动它,否则什么也不会唤醒它。但是:在开始之前,您可能需要再次启用这些侦听器,否则可能会遇到奇怪的副作用(我做到了)。另一方面,至少这不需要重新启动。

有关技术细节,您可能需要交叉询问“ 如何管理与应用程序的意图关联 ”问题,或直接进入AOSP开发人员手册的“ 意图”部分


16

首先,我建议您停止使用任务杀手。他们消耗的电量多于节省电量。系统在需要运行时重新启动服务,这会导致电池消耗。

其次,您假设释放内存是一件好事。它不是。释放内存不会减少电池使用量。您真正需要寻找的是使用大量CPU周期的应用程序。这将耗尽电池电量。

Android基于Linux。Linux一直希望使用所有可用的内存,因为可用内存是浪费的内存。android系统将负责释放未使用的应用程序的内存,以便其他应用程序在需要时可以使用它。

即使您尝试杀死正在运行并占用内存的应用程序,系统也会重新启动这些服务/应用程序,这可能会导致电池消耗,因为它们可能在启动时会发生一些同步,或者只是使用了CPU周期初始化应用程序。终止应用程序还会导致尝试启动应用程序时设备显示缓慢,因为在向您提供应用程序用户界面之前,现在需要先启动通常可能正在运行的某些程序。

GPS,WiFi,蓝牙和数据使用情况等会导致电池电量耗尽的事情将使您的CPU大量使用,以处理正在发送和接收的数据。不使用时将其关闭会节省大量电池电量。我的设备电池电量不好,它甚至无法充电超过94%,但是如果我在不需要这些服务时将其关闭,则可以节省12个小时或更长时间。

我一直在使用google maps,而在我的电池统计中,它甚至没有列为使用资源的应用程序。我电池电量最高的用户是屏幕@ 31%,显示的电池电量最低的是GMail @ 3%。我可以向您保证,谷歌地图不是造成电池消耗的原因。使用任务杀手更可能是原因。正如我所说的,我几乎每天都使用google map来查询路线,而且它甚至不在使用电池的应用程序的前10名中。

有关任务杀手的更多信息,请访问Google Android开发者博客

关于Android多任务处理的一个常见误解是流程和应用程序之间的差异。在Android中,这些不是紧密耦合的实体:对于用户而言,似乎没有当前正在运行该应用程序的实际进程的应用程序;多个应用程序可以共享进程,或者一个应用程序可以根据需要使用多个进程;即使该应用程序没有积极地做某事,该应用程序的进程也可能会被Android保留。

您可以看到应用程序的进程“正在运行”的事实并不意味着该应用程序正在运行或正在执行任何操作。它可能只是存在,因为Android在某个时候需要它,并已决定最好保留它,以防再次需要它。同样,您可能需要离开应用程序一小段时间,然后从上次停止的地方返回该应用程序,在此期间,Android可能需要摆脱其他原因的处理。

Android如何以这种方式处理应用程序的一个关键是流程不会被彻底关闭。当用户离开应用程序时,其过程将保留在后台,以便在需要时可以继续工作(例如下载网页),如果用户返回该应用程序,则会立即进入前台。如果设备永远不会用完内存,那么Android将保留所有这些进程,真正使所有应用程序始终“运行”。

当然,内存是有限的,为了适应这种情况,Android必须决定何时清除不需要的进程。这导致了Android的流程生命周期,即用于决定每个流程的重要性的规则,从而决定了应该删除的下一个流程。这些规则基于流程对用户当前体验的重要性以及自用户最后一次使用该流程以来已经花费了多长时间。

Android确定需要删除某个进程后,便会残酷地执行此操作,只需强制杀死它即可。然后,内核可以立即回收该进程所需的所有资源,而不必依赖该应用程序的编写正确并响应有礼貌的退出请求。允许内核立即回收应用程序资源可以轻松避免严重的内存不足情况。

如果用户稍后返回到已被终止的应用程序,则Android需要一种以与上次出现时相同的状态重新启动它的方法,以保留“所有应用程序一直在运行”的体验。通过跟踪用户知道的应用程序的各个部分(“活动”),并使用有关其被查看的最后状态的信息重新启动它们,可以完成此操作。每次用户离开该部分时,都会生成此最后一个状态。而不是在应用程序被杀死时进行更改,这样内核以后就可以自由地将其杀死,而不必依赖应用程序在那时正确响应。

在某些方面,Android的进程管理可以看作是交换空间的一种形式:应用程序进程代表一定数量的使用中内存;当内存不足时,某些进程可以被杀死(交换掉);当再次需要这些进程时,可以从上次保存的状态(交换入)重新启动它们。

这是另一篇关于任务杀手如何消耗电池电量的文章。

请勿使用自动任务终止程序软件
总而言之,使用自动任务终止程序可能会导致:电池电量过度消耗(好像手机尚未足够快地耗尽电池电量),手机经常过热并且程序关闭(崩溃)随机–您实际要使用的程序。远离这些!

如果您确实要在“停止地图”上设置,直到要使用它,您可以做的一件事就是在钛金备份中使用“冻结”选项。这实际上将从设备中删除该应用程序,并且与该应用程序关联的任何服务都不会启动,直到您取消冻结它为止。


1
释放内存可使Droid X从缓慢的〜30-40 MB的速度缓慢爬行到具有合理响应能力的> 70MB的快速响应速度,在任何情况下都没有应用占用CPU。抱歉,这是一个很好的理论,只是在实践中不适用。
DVK'2

另外,当Android内存管理器杀死我的网络浏览器,并失去所有打开的选项卡来为Google Maps腾出空间时,这对生产力产生了很大的影响。
DVK'2年

4
我告诉你,你正在经历的是安慰剂效应。空闲内存不会使您的设备运行更快,而空闲CPU却可以。我为您提供了另一个有关任务杀手的参考资料(来自Google)
Ryan Conrad'2

2
使用任务杀手会导致工作流失,我在回答中解释了原因。最重要的是,如果您阅读了完整的答案,我将通过冻结应用程序为您使用钛的问题提供确切的答案。
瑞安·康拉德

3
@Chance否,因为如果您杀死当时未实际运行的进程,则系统最终将不得不重新启动该进程,并且它将进行“所有初始化”,这将使用CPU。仅仅因为一个进程正在运行,并不意味着它实际上在做任何事情。
瑞安·康拉德

11

您是否考虑过卸载和重新安装地图作为可能的解决方案?

  1. 首先,通过删除/system/app/Maps.apk文件来摆脱预加载的地图:

    su  
    rm /system/app/Maps.apk
    

    一旦系统应用程序更新,它在/ system / app文件夹中就没有用了,可以安全地删除。

  2. 然后将当前的Maps版本复制到您的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步中的命令创建一个名为“ Disable Maps”的脚本,并使用第4步中的命令创建另一个名为“ Enable Maps”的脚本(都选中“ Needs SU?”)。

现在,您可以从使用Android常规的“添加快捷方式”方法创建的脚本中向主屏幕添加2个GScript快捷方式(GScript是其中的一种选择。)

此方法的唯一缺点是,您在卸载时很可能会从主屏幕上丢失“地图”快捷方式(和/或小部件),需要您在重新安装后重新添加。您当然仍然可以从应用程序抽屉中启动地图。


在我的DroidX上预先安装了Maps会对这一过程产生负面影响吗?还是那不在ROM中?+1是个绝妙的主意!
DVK'2年

2
如果您不先删除APK的系统版本,则卸载将失败。通常,一旦系统应用从Market获得更新,就可以安全地删除/ system / app /文件夹中的相应APK。
Chahk '02

1
@Chank-我认为这不是Verizon的bloatware,实际上只要我具有root身份,我就有权删除系统版本?:)
DVK '02

1
只要您的手机已扎根,您就可以轻松从/ system / app删除Maps.apk。
Chahk '02


1

我建议使用“钛合金”备用主页 市场链接的“冻结”功能。我相信您必须先注册该应用程序(6.58美元)才能使用该功能,但是我向您保证,如果您想入侵您的手机,这是值得的。付费购买该应用程序的另一个主要原因(除了支持开发人员编写精美的免费软件外)是能够对您备份的应用程序和数据进行批量安装(即从备份还原)。否则,您必须浏览标准的应用程序安装对话框。

从有关冻结的网站上:

应用程序冰柜可以禁用应用程序(并使它不可见)而无需卸载它

或者,您实际上可以执行卸载并重新安装。您可能会发现有理由这样做是因为冻结,我不知道。


抱歉,但这没有帮助。在我的问题中,“我尝试过的事情”下的要点3:“通过Titanium Backup Pro冻结。这需要重新启动并且通常不太舒服。”
DVK 2012年

0

如果您的手机具有选项Settings > Applications > Development > Stop app via long-press,则您始终可以通过这种方式关闭Google Maps,然后该过程也会终止,直到您再次打开该应用程序。


-1

根您的手机,然后使用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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.