手机管理应用研究【3】—— 垃圾清理篇

欢迎转载。转载请注明:http://blog.csdn.net/zhgxhuaa

说明

在总篇中提到过垃圾清理,本篇将着重介绍针对缓存、卸载残留、无用数据等“静态内容”的清理,有关于系统进程的清理以及手机加速的相关功能。将放到《手机加速篇》中介绍研究。

什么是垃圾

关于系统垃圾的定义

如今非常多手机管理软件中都有垃圾清理的功能。本篇也来对垃圾清理做一个简单的分析和介绍。在正式分析之前。让我们首先看一下“什么叫系统垃圾?”。在百度本科中,关于“系统垃圾”是这样定义的:系统垃圾。就是系统不再须要的文件的统称。

当你浏览过网页,安装后又卸载掉的程序残留文件及注冊表的键值。这些都是对系统毫无作用的文件。仅仅能给系统添加负担,所以叫垃圾。

关于系统垃圾事实上就一句话”全部我们所不再须要的资源、文件、缓存。就是垃圾”。我们清理系统垃圾就是要清理掉这些不再须要的文件。

Android中有哪些能够清理的垃圾

首先看一下在眼下流行的手机管理软件总,都将那些作为能够清理的垃圾。以下是使用率比較高的四款手机管理软件的垃圾清理部分截图:

结合这些手机管理软件,对Android手机中能够清理的垃圾总结例如以下:

A.       应用缓存文件

B.       应用卸载残留

C.       没用的安装包

D.       内存数据

E.        系统垃圾(日志、缩略图、空目录等)

F.        广告文件

G.       大文件(文件大小大于某个值的文件)

H.       SD卡上的无用文件

在清理这些垃圾文件时,有的须要root权限,有的不须要。接下来将统一做一下介绍分析。

Android应用数据管理策略

在了解了关于垃圾文件的定义后,以下介绍一些Android中关于应用数据的管理策略:

Android中数据存储能够简单的分为内置存储(主要指应用data文件夹)和外置存储(主要是SD卡)两种情况。

Android对这两种不同情况的管理策略是不一样的。

对于内置存储中的数据採用进程隔离的原则存储。外置存储则採用全局共享的原则存储。

对于清理内置存储中的应用私有数据一般来说是须要root权限的,对于清理外置存储中的数据一般来说是不须要特殊权限的。

高速清理与深度清理

在非常多手机管理类软件中都会发现有“高速清理”和“深度清理”。这里简单说一下:

  • 所谓高速清理,事实上往往就是指在垃圾扫描时仅仅扫描两到三层文件夹,临时不做一些须要深度遍历等的耗时操作。
  • 所谓深度清理,往往就是指对全部可清理的垃圾进行全面扫描,对文件夹进行深度遍历。

这里有一点要说的是。二者的看似泾渭分明,实则是能够相互融合的,一个可行測策略是:

在管理软件启动后,选择系统空暇时间,定时做深度扫描,在用户手动触发时做高速扫描。

只是这里又引出另外一个问题是:在空暇时扫描要有合适的策略,什么时候開始,什么时候暂停,必须保证在不影响应用正常使用的前提下进行。

系统垃圾清理

应用缓存清理

对于应用缓存的清理,本文将介绍两种实现方案。分别为:自己实现应用缓存清理和利用系统接口实现应用缓存清理,接下来将分别介绍。

自己实现应用缓存清理

要清理应用缓存,首先要了解应用的缓存是怎么存放的。一般来说。Android中应用的缓存包含例如以下部分:

A.       /data/data/ package_name /cache(应用缓存)

B.       /mnt/sdcard/Android/ package_name /cache(外部应用缓存,FROYO以后支持)

C.       /data/data/package_name/database/webview.db*(WebView缓存)

D.       /data/data/package_name/database/webviewCache.db*(WebView缓存)

E.        其它一些/data/data/ package_name /*cache文件夹(应用缓存)

F.        /data/data/package_name/files(比較严格的清理策略时也能够选择清理)

对于保存在/data/data/ package_name文件夹下文件。应用本身及与其共享userId的应用拥有所有的读写运行权限,其它应用是没有读写权限的,例如以下:

通过上面的分析,我们得出了清理应用缓存的第一种方案:

在获得root权限的前提下。遍历扫描应用的上述缓存文件夹,假设发现则删除就可以。以下两段是计算缓存大小和清理缓存的部分演示样例代码:

计算缓存大小部分的代码片段:

清理缓存部分的代码片段:

当然。这里的扫描和清理工作也能够通过JNI放到C代码里去做,实现都是类似的。在通过C代码是否缓存时能够參见@frameworks/native/cmds/installd/commands.c中的free_cache函数。

利用系统接口实现应用缓存清理

用过Android手机的朋友相信都知道在手机的“设置->应用”中的应用详情页里面有“清除缓存”的功能,以下是在我我个人的手机上一个应该的截图:

OK。到这里。问题来了,我们能否够利用系统接口实现应用”清除缓存“功能呢?Android系统中应用详情页位于@/packages/apps/Settings/src/com/android/settings/applications/InstalledAppDetails.java中。

InstalledAppDetails中清理应用缓存部分的代码例如以下所看到的:

在PackageManager中关于deleteApplicationCacheFiles的实现例如以下:

这里我们要注意例如以下几点:

A.       deleteApplicationCacheFiles接口是hide的,在代码中不能直接调用。

B.       使用deleteApplicationCacheFiles接口须要声明DELETE_CACHE_FILES权限。

C.       通过deleteApplicationCacheFiles接口是无法清除系统应用缓存的。

D.       缓存清理结果通过IPackageDataObserver接口完毕回调。

除了deleteApplicationCacheFiles接口,PackageManager中还有例如以下两个接口能够选择调用:

以下是採用另外一种缓存清理方式的部分演示样例代码,例如以下:

以下是获取各个应用缓存大小的部分演示样例代码:

两种实现方案对照

在介绍了两种应用缓存清理方式以后,这里做一个简单的对照,以供使用时进行选择:

A.       从范围:第一种方式清理范围更广,更彻底。另外一种方式仅仅能清理非系统应用,第一种方式能够清理全部应用,甚至应用自己定义缓存文件。

B.       从权限:第一种方式须要root权限。另外一种方式仅仅须要在AndroidManifest中指定DELETE_CACHE_FILES就可以。

C.       从安全:採用第一种方式时要有合适的策略,避免清理掉不应该清理的缓存。

综上,第一种方式的清理范围更广更彻底一些,在取得root权限的情况下,建议採用第一种方式。

应用卸载残留清理

如在1.3中所介绍,应用安装后的数据存放有内置存储和外置存储两种方式。

相应内置存储中的数据在应用删除时会自己主动被删除。这里能够不用关心。可是很多Android应用程序会在移动终端的存储卡上创建自己应用程序专用的文件夹。用来存放缓存文件、暂时文件或者通过网络下载的视频、音频、书籍等媒体文件。可是。当Android应用程序被卸载时。残留在存储卡上的文件不会被删除。而当中大部分文件对于用户来说是无用处的,属于垃圾文件。假设用户频繁的安装和卸载新软件,就会在存储卡产生大量的应用程序残留文件,不但占用存储卡空间,并且使存储卡的文件管理变得困难起来。

因此,实现Android应用程序残留文件夹的识别与清理是十分必要的。

应用卸载残留清理的一个关键点就是:应用残留文件夹的识别。

这里有两种可行的方案:

方案一:维护文件映射信息

在文件或者数据库中应用包名(唯一)与SD卡上文件的一个映射信息,能够採用应用包名为Key,由于不同应用的包名是唯一的。不会反复。採用SD卡上的文件作为Value。建立映射例如以下所看到的:


Key


Value


应用包名(唯一)


目录

在检測到应用卸载事件后推断该应用是否有相应的文件存在。有则提示用户删除。

採用这样的方案时须要例如以下几个问题:

A.       映射表的建立:须要对使用频率和用户量较高的应用建立映射表。这里最好有后台提前扫描应用建立,然后下发给client;也能够client先上报信息到后台,后台修正。映射表的建立是识别的关键。

B.       错误识别问题:一般来说不同应用的数据放在不同的目录中,不会有反复。但在实际中难免会出现反复的情况。对于这样的情景有两种处理方式:

1)        映射关系细化到文件。删除完文件后再推断上层目录是否为空。为空则删除。

2)        有多个应用的映射关系反复时推断全部应用都已卸载再删除目录。

方案二:记录应用安装过程

该方案的普遍性并不如第一种方案强,但也可作为一种实现方案作为參考。

方案例如以下:

1)        在通过管理软件进行安装时,通过log记录安装应用所产生的文件。在应用执行时,监控SD文件的变化,发现变化时。当前应用(执行时栈顶)即文件的创建者。相同在log中记录这样的相应关系。

2)        在通过管理软件卸载应用时。依据log信息运行逆过程。

无用安装包清理

无用安装包的清理比較简单。

推断无用安装包的标准是:

A.       存储文件夹中存在APK文件。可是该APK已被安装

B.       APK文件已损坏

扫描安装包有两种处理方式:

A.       深度扫描:扫描SD卡上的全部文件夹

B.       高速扫描,仅仅扫描手机管理软件(豌豆荚、360手机助手、应用宝等)和浏览器(UCWeb、QQ浏览器)和Download文件夹。

要清理其它下载文件也能够依照这个思路来实现。

系统垃圾清理

系统垃圾清理包含暂时文件、缩略图、系统日志、失效文件、空白文件等的清理,以下做一下介绍。

清理系统日志

日志文件分为系统日志和应用日志两部分,其各自的存放位置分别为:

1)        系统日志的存放位置例如以下(不同手机可能会有所差异):

A.       /data/local/tmp/*

B.       /data/tmp/*

C.       /data/system/usagestats/*

D.       /data/system/appusagestates/*

E.        /data/system/dropbox/*

F.        /data/tombstones/*

G.       /data/anr/*

H.       /dev/log/main

2)        应用日志存放位置能够推断的有:SD卡上后缀名为“.log”或者“*log.txt”等结尾的文件。

清理图片缩略图

在SD卡上的DICM文件夹下有一个隐藏的文件夹,名字叫“.thumbnails”,这个文件夹存放的是系统图片的缓存。清理缓存主要就是清理这个文件夹。应用文件夹也可能有缩略图文件。但不easy识别,所以不建议清理,能够放在清理残留数据时一起清理。

清理失效文件与空白文件

推断标准:

A.       文件的长度为0则觉得是空白文件,能够删除

B.       目录中不包括不论什么文件或目录,则觉得是空白目录。能够删除。

C.       除了上面两种情况外。还能够扫描文件的创建时间,非常长时间未使用的文件觉得是无效文件。

大文件清理

对于大文件的识别比較简单,仅仅推断文件大小是否超过一定的阀值(比如:豌豆荚觉得大小超过10M即为大文件)就可以。但这里有两个须要注意的点:

A.       大文件通常是视频文件或者应用数据(比如百度map的数据)。对于这些文件在清理是建议默为“不选中”状态。

B.       能够充分利用2.2.1中建立的映射关系,对大文件是否建议删除提供更加准确的建议。

对于广告文件等的识别和处理这里不再赘述了,原理都与上面的类似。

总结

通过本篇中的方法基本上能够实现对Android系统中垃圾文件的全面清理。这里要强调的是:

A.       垃圾清理是把双刃剑,一定要有合适的策略。否则反而影响用户体验。

B.       在清理垃圾文件时一定要抱着这种态度:宁可错,不可过。

最后。希望本文可以给全部对垃圾清理和手机管理感兴趣的朋友带来一点帮助。将荣幸之至。有不论什么问题欢迎交流和讨论。下一篇将介绍《手机加速》

时间: 2024-08-04 11:47:49

手机管理应用研究【3】—— 垃圾清理篇的相关文章

手机管理应用研究【2】—— 垃圾清理篇

欢迎转载,转载请注明:http://blog.csdn.net/zhgxhuaa 说明 在总篇中提到过垃圾清理,本篇将着重介绍针对缓存.卸载残留.无用数据等"静态内容"的清理,有关于系统进程的清理以及手机加速的相关功能,将放到<手机加速篇>中介绍研究. 什么是垃圾 关于系统垃圾的定义 现在很多手机管理软件中都有垃圾清理的功能,本篇也来对垃圾清理做一个简单的分析和介绍.在正式分析之前,让我们首先看一下"什么叫系统垃圾?".在百度本科中,关于"系统

手机管理应用研究【3】—— 手机加速篇

欢迎转载,转载请注明:http://blog.csdn.net/zhgxhuaa 说明 在上一篇中介绍了“垃圾清理”,在系统优化中有一个功能往往是与垃圾清理分不开的,那就是“手机加速”.目前流行的管理软件中以及网络上并没有明确的定义什么叫“垃圾清理”什么叫“手机加速”.结合上一篇的“垃圾清理”这里统一做一个在本系列文章中的定义: n 垃圾清理:在本系列文章中认为扫描和清理的是静态内容,包括应用的文件缓存.缩略图.日志等系统或应用创建的文件,这些文件不具有“运行时”特征. n 手机加速:在本系列文

手机管理应用研究【6】——省电管理篇

欢迎转载,转载请注明:http://blog.csdn.net/zhgxhuaa 说明 本篇将介绍省电管理篇,主要介绍一下Android的耗电情况和目前市面上<电池助手>类应用涉及到的一些技术点.本篇将对这些知识点做一下总结和分析.主要包括: A.       电池信息(耗电排行) B.       省电管理 C.       剩余可用时间估算等 耗电分析 手机耗电分析 以我的手机(小米2S)为例,首先来看一下我的手机的电池使用情况,如下图(在设置->电量中查看): 在手机中应用的耗电情

手机管理应用研究【1】——总篇

说明 由于自己一直以来对手机管理方面的东西比较感兴趣,加上最近以来老大的驱动,所以决定研究整理一下root相关技术(不局限于root).手机Root是一门大学问,root的招数各有不同.Root权限的利用同样也是一门学问.接下来将学习研究一下Android中root相关技术.如何取得root权限不是我的特长,所以接下来的整理中,将重点研究整理在获取root权限以后,可以做那些事情,已达到通过root权限优化用户体验的目的. n  由于涉及到的内容较多,需要投入大量的精力和时间.在整理时会优先整理

手机管理应用研究【4】——应用杂篇

说明 在本系列文章的第一篇<安装卸载篇>中介绍了应用安装卸载相关的一些东西.本篇之所以取名为<应用杂篇>就是希望继续介绍一些应用相关的相对比较零散的东西,包括:应用安装位置选择.应用锁.山寨应用识别.零流量分享.智能推荐等. 上接<应用安装卸载篇>,首先介绍一下应用安装位置选择. 应用安装位置 在安装应用时,应用到底会安装到内置存储器里面还是外置存储器里面呢?这里主要取决于四个方面的信息: A.       应用自身在AndroidManifest中队installLo

【R笔记】R的内存管理和垃圾清理

R输入命令时速度不要太快,终究是个统计软件,不是编程! 写R程序的人,相信都会遇到过“cannot allocate vector of size”或者“无法分配大小为...的矢量”这样的错误.原因很简单,基本都是产生一个大矩阵等对象时发生的,最干脆的解决办法有两种,第一种是加大内存换64位系统,第二种是改变算法避免如此大的对象.第一种办法,是最好的办法,不过大对象的需求是没有止尽的,终究不是长久之道.第二种办法是最好的思路,无论多么大的对象都是可以弄小的,无非就是分而治之.时间换空间等,对算法

手机管理中的应用【6】——电源管理篇

欢迎转载,转载请注明:http://blog.csdn.net/zhgxhuaa 说明 本篇将介绍省电管理篇.主要介绍一下Android的耗电情况和眼下市面上<电池助手>类应用涉及到的一些技术点. 本篇将对这些知识点做一下总结和分析.主要包含: A.       电池信息(耗电排行) B.       省电管理 C.       剩余可用时间估算等 耗电分析 手机耗电分析 以我的手机(小米2S)为例,首先来看一下我的手机的电池使用情况,例如以下图(在设置->电量中查看): waterma

软交所--上网小窍门使用正版手机管理软件

移动互联网时代,手机从最原始的通话工具演变成了如今无所不能的掌上电脑,可以去软件商城下载很多软件.手机的多功能都是利用网络实现的,互联网已经将人与人之间的活动密切的联系起来.如何才能将手机的功能发挥到最大?如何才能将手机的资费合理支配,这里面其实是有诀窍的. 第一步:在权威的官方网站上下载正版的手机管理软件,可以整理.利用好你的手机,手机管理软件的功能是非常强大的,可以最大限度保护您的手机不被病毒侵袭.同时,手机管家可以对你的手机进行深度清理,可以将手机软件运行的残留和系统垃圾文件都清理干净,还

其实Mac垃圾清理软件并没有那么可怕

首先也是最重要的一条,不要使用盗版.据我所知市面上见到的盗版cmm是破解以后安装好就可以直接使用的,不需要序列号激活. 作为对盗版软件有高度洁癖而成为厌恶盗版的最大原因的我来说,我很清楚这类被网上非开发者改来改去的程序有多复杂.不可预测.它的扫描和清理方式可能和正版不一样,甚至存在后门,不仅不能正确清理你的电脑,反而会把系统搞乱甚至破坏系统. 所以希望大家去cleanmymac官网下载使用. 另外建议大家使用最新版本的cmm3,不要使用旧版本. 接下来就是怎样正确地清理了.cmm3提供了一个"自