解决Moto Defy升级2.2后Google地图假死问题


UPDATE:港行版官方已经放出更新,解决了卡机的问题。系统版本:Moto_Version.34.3601.7.MB525.Retail.en.CH18

出现假死的不仅仅是Google地图,开启其他比较大的应用后回主界面也有同样的问题存在。

从网上获悉这是由于内核保留的内存太小导致的,通过调整Linux内核保留的最小内存可解决这个问题。

基于网上的一些信息以及自己对Linux的一点理解,解决方法如下:

  1. 确保手机已经root并且安装了root explorer.
  2. 使用root explorer打开/system/etc
  3. 长按init.goldfish.sh选择复制,修改复制文件名称为install-recovery.sh
  4. 长按install-recovery.sh,选择Open in Text Editor开始编辑文件
  5. 清除第一行以外的所有内容。然后添加以下内容:
    su;
    sysctl -w vm.min_free_kbytes=4096
  6. 保存文件,确认install-recovery.sh文件对用户和组开放读、执行权限。然后删除 install-recovery.sh.bak文件。
  7. 重启手机,新的参数即可生效,或者直接点击install-recovery.sh选择执行,参数也会立即生效。

install-recovery.sh文件完整内容为:

#!/system/bin/sh

su;
sysctl -w vm.min_free_kbytes=4096

参数生效后,应用程序之间切换快多了。
参考:
http://board.phonehk.com/viewthread.php?tid=289652&extra=page%3D1&page=526
http://forum.xda-developers.com/showthread.php?t=1047153&page=2

Advertisements

22 thoughts on “解决Moto Defy升级2.2后Google地图假死问题

  1. 哥们麻烦问下修改后的文件名到底是你文章里说的install-recovery.sh还是各个论坛转的你的文章里的nit-recovery.sh,貌似您的文章已经改成前者了哦,但各个论坛的人都在转载第二个init开头得帖子,这个是否很重要,如果是改第二个init开头的不会死机卡M吧?盼望您的回复多谢。

    1. 另外还请教个问题老师,我在系统/system/etc/复制这个文件init.goldfish.sh到了SD卡,按照步骤修改成为install-recovery.sh,的确生成了一个后缀.bak的文件我没管,我只把修改后的文件install-recovery.sh复制回了/system/etc/下并全部对勾修改了权限后执行重启了,请问系统/system/etc/init.goldfish.sh这个文件本身需要管他吗?是删除还是根本不用动?

      1. 系统里原来的文件不要动,比如/system/etc/init.goldfish.sh, 我这里是直接复制init.goldfish.sh文件改名为install-recovery.sh然后修改里面的内容。权限按照我帖子里说的方式设定就好了。

    2. 如果不是install-recovery.sh,启动的时候就不会被调用到,其他名称不会对系统有影响。另外,我这里港版最新的更新已经没有假死的问题了。

      1. 非常感谢,我的假死问题经解决了,在数据关闭、数据开放、WIFI模式各个模式测试均没有问题。权限我选的是楼下的说的全打钩,这个会有什么影响吗?需要按照您说的那样操作吗?

      2. 另外我看有的同学,比如用CM7的,系统自动默认就是4096,他们改成了8192,请问我的defy用的2.2的新新英,可以这么改吗?我还是没闹明白改这个数据的原理,运行其他大程序都会变快吗?是不是和超频的道理差不多?内存保留加大了,那前台运行程序不就减小了?这样对电量消耗会不会加大?再次感谢。

  2. 还是不行,代码加到init-recovery.sh以后权限改成9个钩重启后cat还是返回2845,还是会假死。
    开机后必须要用终端模拟器手工敲入su; sysctl -w vm.min_free_kbytes=4096后cat才返回4096。
    直接运行init-recovery.sh返回值也是2845。
    不知是不是init-recovery.sh编码有问题。如方便请将你的init-recovery.sh发给我yowlin.zh@gmail.com。非常感谢!

    1. 实在对不起,我把文件名称拼错了。正确的文件名应该是:install-recovery.sh,我的手机里是正确的文件名。但是在写日志时出现了笔误,再次表示歉意。

  3. 还是不行,代码加到init-recovery.sh以后权限改成9个钩重启后cat还是返回2845,还是会假死。开机后必须要用终端模拟器手工敲入su; sysctl -w vm.min_free_kbytes=4096后cat才返回4096。直接运行init-recovery.sh返回值也是2845。不知是不是init-recovery.sh编码有问题。如方便请将你的init-recovery.sh发给我yowlin.zh@gmail.com。非常感谢!

      1. 重启以后用RE打开ETC文件夹后点击init-recovery.sh执行,然后再cat /proc/sys/vm/min_free_kbytes;返回值也是2845。好像只有用终端模拟器执行sysctl -w vm.min_free_kbytes=4096以后才有变化。

      2. 我不明白是什么意思。
        我现在用的还是google地图5.5。
        自从修改了init-recovery.sh脚本以后虽然重启返回值还是默认的2845,但是再也没假死了。
        不知道这是不是BUG,如果是,MOTO官方ROM会出现如此低级错误让我太失望了。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s