解决Android关机后SD卡上的程序图标消失

 说实话,这不能不算是Android的一个弊端,也怪Android最初考虑apk安装的时候考虑的不够充分完全。解决方法的前提是机子要有root权限,并且能用命令行(或者你在电脑上用adb工具也可以),我们要做的就是重启桌面。

 

  进入命令行,使用su获得root权限,然后执行ps命令,可以看到如下:

root      4451  1     101520 27376 ffffffff 00000000 S zygote
system    4458  4451  226680 37284 ffffffff 00000000 S system_server
app_48    4535  4451  137596 24608 ffffffff 00000000 S com.lge.android.cime
radio     4540  4451  147660 24908 ffffffff 00000000 S com.android.phone
app_54    4543  4451  167056 31740 ffffffff 00000000 S android.process.lghome
system    4545  4451  133820 20352 ffffffff 00000000 S com.android.settings

  但是桌面程序是哪个呢?这就真的依赖机子本身了,譬如我这个测试机是LG P503,对应的桌面程序是android.process.lghome,所以通过上面的ps命令结果可以看到它的进程号是4543(红色标出,当前行的第一个数字,记住,是第一个数字4543而不是第二个数字4451),于是执行:

#kill –9 4543

  此时不会重启机子,只用重新再去桌面就OK了。另外记住:上面如果kill过system_server的话,要重新执行ps命令获取桌面的进程号,因为重启后这些进程号都变了。

  如果你不是LG P503机器,你也可以查查看你的桌面程序是什么,如果是原生的系统,会有launcher的关键字,找找看,再或者找找其它看起来像的,就找进程号大于system_server的,如本例中,system_server的进程号是4458(红色标出),那么找所有第一个数字大于4458的kill看看,不用害怕,最多也就是重启一下手机,不会破坏手机的。成功后,记住后面的名字(如本例中的android.process.lghome),以后用得着的,说不定就这次就用得着,因为你在寻找过程中,可能kill掉了不该kill的进程,那么你再次重启后,直接kill这个桌面程序就OK。

  如果你实在难以找到桌面程序的进程(其实按照上面的方法每一个都试试,一定能找到的,我在考虑是不是写个简单的apk供大家简单使用呢?不过想必这个东西用过linux的都会,所以我就不卖弄了)。也可以尝试找出system_server的进程号(如果你能确定你的桌面程序,直接跳过这一步往下看),第一个数字4458就是,然后再执行kill命令:

#kill –9 4458

  然后就可以看到你的机子重启了,等启动完之后,如果图标都回来了,那就万事OK了。如果没有完全回来,那就只能用上面的方法了。

总结:

  方法其实很简单:获得桌面程序的进程号,杀掉它(它会自动重启),就得到了完整的图标。

原理分析

  android为了把应用程序装到sdcard上面,对每个安装在上面的应用都挂载了对应的目录。但是我们在手机启动之后,这些都还没完全挂载上,所以桌面根本访问不到它们,既然访问不到,自然图标就没有了(说到这里,如果android不仅把程序列表存起来,也把图标对应存起来估计就少了一些麻烦了,虽然存在程序删掉了但是图标没删的问题,但有什么问题呢?)。所以上面的动作就是为了让桌面程序重启一次。重启system_server的原因是因为桌面程序在每个机子上都不同,难以找到,而system_server都一样,如果能找到桌面程序的进程直接kill掉那是最好的了。因为此时sdcard已经挂载上了,那些应用程序也相继在挂载,但如果应用程序多,就不一定挂载完了,毕竟有一个过程的。

  至于网上说的是因为sd卡读写速度慢造成图标读不出来,那是浮云~~sd卡读写速度虽然慢,但不是造成这个问题的关键。祝各位能顺利解决问题。

  写这篇文章纯粹是因为博客太久没更新了,所以写写。

补充:

  如果你看到这个地方了,你估计要吐血了。。。因为经过继续摸索,发现一个更简单的方法:那就是利用任务管理器,将所有的应用程序关掉,那么这里面的应用程序就必定包括了桌面程序,从而达到了上面要关掉桌面程序的目的。这样你就不必自己去寻找桌面程序的进程号再去关掉它了。这里我用的是安卓优化大师,不过我想任何一个任务管理器或者程序管理器都能做到这一点吧,甚至Android自带的应用程序管理如果你愿意一个个试着关掉的话,也是可以办到的。



微信扫描下方的二维码阅读本文

© 版权声明
THE END
喜欢就支持一下吧~
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容