精华内容
下载资源
问答
  • 本项目是一个基于安卓的开源一键清理项目源码,支持root后进行强力清理。不过项目是使用android studio开发的工程,eclipse需要自己转工程才可以导入。实现的功能有:基本功能、内存加速、缓存清理、自启管理、软件...
  • 同样采用Android智能系统,之所以高中低档价格会有那么大的悬殊,根本原因是硬件配置。入门级手机和平板电脑除了采用算不上领先的芯片方案外,内存空间还非常有限,而这仅有的空间,被一些定制程序和流氓软件霸占,...

    同样采用Android智能系统,之所以高中低档价格会有那么大的悬殊,根本原因是硬件配置。入门级手机和平板电脑除了采用算不上领先的芯片方案外,内存空间还非常有限,而这仅有的空间,被一些定制程序和流氓软件霸占,碍事又碍眼,还拖慢系统速度,想折腾,但没用武之地。怎么办?华山一条路——减肥。

    两个误区必须消除    通常在手机和平板电脑的介绍资料中会出现ROM和RAM这两个参数,很多人混淆不清。其中ROM是指Android系统和应用程序所占用的空间,手机中的短信和联系人默认都是存储在这里的,而RAM类似电脑的内存,指当打开程序的时候需要占用,运行程序越多,占用的RAM空间就越大,如果无法满足,就会造成速度变慢,甚至是死机。虽然不少手机和平板电脑都支持存储卡扩充,但与ROM、RAM完全两回事。

    此外大家还有一个误区,以为将系统内无用的程序删除之后,就能够腾出大量空间,直接用于游戏和应用程序的安装。其实不然,Android系统分配给/ DATA和/SYSTEM目录的空间大小是固定的,/DATA目录保存用户程序,/SYSTEM目录保存系统程序,所以单纯删除/SYSTEM目录下的系统捆绑程序,虽然可以释放空间,但不能为用户所用,需要将装在/DATA/APP目录下的程序挪到/SYSTEM/APP下方可。

    系统程序卸载器 助你轻松减肥    很多地方给大家介绍的系统减肥方法,都是在获取ROOT权限之后,使用R.E.之类的高权限文件管理器,深入系统目录,半猜半蒙的删除文件,风险大,操作也复杂,而且不容易删除干净。而我们推荐是使用《系统程序卸载器》(下载地址:http://www.coolapk.com/apk-3200-com.danesh.system.app.remover),它的优点是界面直观,不会“错杀无辜”,还有备份功能。以华为C8500为例,可以删除的应用程序包括百度工具、百度贴吧、谷歌搜索、号码百事通、天翼Live、天翼空间、天翼视讯等,能腾出20MB的空间。在安装了新的输入法和浏览器之后,相同的资源也可以删除。

    由于其中有些是开机自启动程序,所以在删除之后,会明显提高开机速度,减少对RAM内存的占用,这也是减肥的一个目的。

    R.E.管理器帮你无痕搬家    要想将装在/DATA/APP目录里的程序(.apk和.odex是对应的)挪到/SYSTEM/APP下,使用户可支配的空间容量增加,还必须借助可以获得最高权限的《R.E.管理器》(下载地址:http://app.joyes.com/soft/soft_5049739.html)。操作其实和电脑上是一样的,利用剪切和粘贴功能。如果遇到“访问被拒绝”或是警告“文件系统为只读”,点击目录名右上方的“挂载读写”按钮即可解除。

    一键清理 自动释放缓存    又没有下载和安装软件,为什么内存空间会自己变小呢?不少入门用户都有这样的疑问。其实我们在访问网站、QQ聊天、爬微博的时候,都会产生缓存文件,而系统不会自动清理,越积越多,需要动手操作。想偷懒话,可以安装软件《一键清理》(下载地址:http://dl.3gfan.com/Android/1Tap.Cleaner.Pro.v1.42H.apk)。它的优点是能定时自动清理,界面直观明了,一键搞定,几乎没有技术含量可言。

    千元Android智能手机虽然运行大型游戏有些吃力,但对付普通应用程序还是游刃有余。在清理了包袱,将资源释放之后,可玩性会得到明显提升。

    15913285_1.jpg

    展开全文
  • android 一键清除 清理

    千次阅读 2019-05-13 10:59:53
      在Android设备中,我们经常会看到与系统或者应用相关的清除功能有:清除数据、清除缓存一键清理,这么多清除功能对于一个程序猿就够难理解了,偏偏很多安卓设备上都有这些功能,对于用户来说就更难理解,趁着...

     

     

    前言

     

      在Android设备中,我们经常会看到与系统或者应用相关的清除功能有:清除数据、清除缓存、一键清理,这么多清除功能对于一个程序猿就够难理解了,偏偏很多安卓设备上都有这些功能,对于用户来说就更难理解,趁着在把玩手机的时候想到了这一点,索引追根究底了解他们的具体区别。

    清除数据和清除缓存

    一键清理

    清除数据、清除缓存、一键清理的区别

    清除数据

      清除数据主要是清除用户配置,比如SharedPreferences、数据库等等,这些数据都是在程序运行过程中保存的用户配置信息,清除数据后,下次进入程序就和第一次进入程序时一样;

    清除缓存

      缓存是程序运行时的临时存储空间,它可以存放从网络下载的临时图片,从用户的角度出发清除缓存对用户并没有太大的影响,但是清除缓存后用户再次使用该APP时,由于本地缓存已经被清理,所有的数据需要重新从网络上获取,注意:为了在清除缓存的时候能够正常清除与应用相关的缓存,请将缓存文件存放在getCacheDir()或者 getExternalCacheDir()路径下。比如对微信清除缓存,则聊天记录、朋友圈缓存的用户头像、图片、文字等信息都会被清除掉,清除缓存后再次进入微信时你会发现消息记录被清空了,朋友圈的图片和用户头像需要加载一会才能正常显示。

    一键清理

      一键清理是系统级别的功能,它主要是杀后台进程,以达到释放内存的目的,但杀掉哪些进程和清理时设置的重要值阈值有关,重要值越大说明进程重要程度越低,如果在清理时某个进程的重要值大于该阈值,该进程就会被杀掉。比如微信等应用在后台,一件清理后会将微信和与之相关的服务都杀掉(有的服务做了特殊处理,杀不死!!!)。

    参考资料

    说明

      为了让程序被卸载后不在文件系统中留下毫无关联的无用文件,建议将应用相关的配置和缓存文件存放在程序被卸载时会删掉的文件夹下面(音乐文件、视频文件、图片、电子书这种适合多个应用阅读和浏览的文件除外),具体路径有:

    • /data/data/package/

    • getFilesDir()

    • getCacheDir()

    • getExternalCacheDir()(是否能够在程序被卸载时被删除与API的等级有关)

    • getExternalFilesDir()(是否能够在程序被卸载时被删除与API的等级有关)

     

    --------------------------------------------------

     

     

    Android 一键清理、内存清理功能实现:

     

    360桌面、金山清理大师等都提供了一键清理、一键加速等功能,其实就是杀一些后台进程来达到释放内存的目的。

       基本思路就是列出所有运行的进程,查看其重要值(RunningAppProcessInfo.importance,值越大说明进程重要程度越低),可以设定一个阈值,

    如果该进程的重要值大于该阈值,就可以杀掉该进程。

    进程的重要值有以下几个等级:

    [java] view plain copy

    1. /** 
    2.          * Constant for {@link #importance}: this is a persistent process. 
    3.          * Only used when reporting to process observers. 
    4.          * @hide 
    5.          */  
    6.         public static final int IMPORTANCE_PERSISTENT = 50;  
    7.   
    8.         /** 
    9.          * Constant for {@link #importance}: this process is running the 
    10.          * foreground UI. 
    11.          */  
    12.         public static final int IMPORTANCE_FOREGROUND = 100;  
    13.           
    14.         /** 
    15.          * Constant for {@link #importance}: this process is running something 
    16.          * that is actively visible to the user, though not in the immediate 
    17.          * foreground. 
    18.          */  
    19.         public static final int IMPORTANCE_VISIBLE = 200;  
    20.           
    21.         /** 
    22.          * Constant for {@link #importance}: this process is running something 
    23.          * that is considered to be actively perceptible to the user.  An 
    24.          * example would be an application performing background music playback. 
    25.          */  
    26.         public static final int IMPORTANCE_PERCEPTIBLE = 130;  
    27.           
    28.         /** 
    29.          * Constant for {@link #importance}: this process is running an 
    30.          * application that can not save its state, and thus can't be killed 
    31.          * while in the background. 
    32.          * @hide 
    33.          */  
    34.         public static final int IMPORTANCE_CANT_SAVE_STATE = 170;  
    35.           
    36.         /** 
    37.          * Constant for {@link #importance}: this process is contains services 
    38.          * that should remain running. 
    39.          */  
    40.         public static final int IMPORTANCE_SERVICE = 300;  
    41.           
    42.         /** 
    43.          * Constant for {@link #importance}: this process process contains 
    44.          * background code that is expendable. 
    45.          */  
    46.         public static final int IMPORTANCE_BACKGROUND = 400;  
    47.           
    48.         /** 
    49.          * Constant for {@link #importance}: this process is empty of any 
    50.          * actively running code. 
    51.          */  
    52.         public static final int IMPORTANCE_EMPTY = 500;  


    直接上代码:

    [java] view plain copy

    1. package com.android.clearmemory;  
    2.   
    3. import android.app.Activity;  
    4. import android.app.ActivityManager;  
    5. import android.app.ActivityManager.MemoryInfo;  
    6. import android.app.ActivityManager.RunningAppProcessInfo;  
    7. import android.content.Context;  
    8. import android.os.Bundle;  
    9. import android.util.Log;  
    10. import android.view.View;  
    11. import android.widget.Button;  
    12. import android.widget.Toast;  
    13.   
    14. import java.util.List;  
    15.   
    16. public class ClearMemoryActivity extends Activity {  
    17.     private static final String TAG = "ClearMemoryActivity";  
    18.   
    19.     /** 
    20.      * Called when the activity is first created. 
    21.      */  
    22.     @Override  
    23.     public void onCreate(Bundle savedInstanceState) {  
    24.         super.onCreate(savedInstanceState);  
    25.         setContentView(R.layout.main);  
    26.   
    27.         Button clear = (Button) findViewById(R.id.clear);  
    28.         clear.setOnClickListener(new View.OnClickListener() {  
    29.             @Override  
    30.             public void onClick(View v) {  
    31.                 //To change body of implemented methods use File | Settings | File Templates.  
    32.                 ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);  
    33.                 List<RunningAppProcessInfo> infoList = am.getRunningAppProcesses();  
    34.                 List<ActivityManager.RunningServiceInfo> serviceInfos = am.getRunningServices(100);  
    35.   
    36.                 long beforeMem = getAvailMemory(ClearMemoryActivity.this);  
    37.                 Log.d(TAG, "-----------before memory info : " + beforeMem);  
    38.                 int count = 0;  
    39.                 if (infoList != null) {  
    40.                     for (int i = 0; i < infoList.size(); ++i) {  
    41.                         RunningAppProcessInfo appProcessInfo = infoList.get(i);  
    42.                         Log.d(TAG, "process name : " + appProcessInfo.processName);  
    43.                         //importance 该进程的重要程度  分为几个级别,数值越低就越重要。  
    44.                         Log.d(TAG, "importance : " + appProcessInfo.importance);  
    45.   
    46.                         // 一般数值大于RunningAppProcessInfo.IMPORTANCE_SERVICE的进程都长时间没用或者空进程了  
    47.                         // 一般数值大于RunningAppProcessInfo.IMPORTANCE_VISIBLE的进程都是非可见进程,也就是在后台运行着  
    48.                         if (appProcessInfo.importance > RunningAppProcessInfo.IMPORTANCE_VISIBLE) {  
    49.                             String[] pkgList = appProcessInfo.pkgList;  
    50.                             for (int j = 0; j < pkgList.length; ++j) {//pkgList 得到该进程下运行的包名  
    51.                                 Log.d(TAG, "It will be killed, package name : " + pkgList[j]);  
    52.                                 am.killBackgroundProcesses(pkgList[j]);  
    53.                                 count++;  
    54.                             }  
    55.                         }  
    56.   
    57.                     }  
    58.                 }  
    59.   
    60.                 long afterMem = getAvailMemory(ClearMemoryActivity.this);  
    61.                 Log.d(TAG, "----------- after memory info : " + afterMem);  
    62.                 Toast.makeText(ClearMemoryActivity.this, "clear " + count + " process, "  
    63.                             + (afterMem - beforeMem) + "M", Toast.LENGTH_LONG).show();  
    64.             }  
    65.         });  
    66.   
    67.         ClearMemoryFloatView.instance(getApplicationContext()).createView();  
    68.     }  
    69.   
    70.     //获取可用内存大小  
    71.     private long getAvailMemory(Context context) {  
    72.         // 获取android当前可用内存大小  
    73.         ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
    74.         MemoryInfo mi = new MemoryInfo();  
    75.         am.getMemoryInfo(mi);  
    76.         //mi.availMem; 当前系统的可用内存  
    77.         //return Formatter.formatFileSize(context, mi.availMem);// 将获取的内存大小规格化  
    78.         Log.d(TAG, "可用内存---->>>" + mi.availMem / (1024 * 1024));  
    79.         return mi.availMem / (1024 * 1024);  
    80.     }  
    81. }  

     

    注意:

     

    我这里选择阈值是IMPORTANCE_VISIBLE级别的,也就是非可见的后台进程和服务会被杀掉(一些系统进程肯定除外)。

    清理的效果跟金山清理大师和360桌面的一键清理效果差不多。

    如果不想杀的太凶,可以选择IMPORTANCE_SERVICE级别,杀掉那些长时间没用或者空进程了,

    这个级别的清理力度不够大,达不到金山清理大师的效果。

     

     

     

     

     

     

    展开全文
  • 最近有一个需求,需要在最近任务页面的一键清除任务按钮中添加一键清除页面缓存的功能,网上找了一圈,看不到什么便捷的版本,基本上是遍历xxx/cache然后删除,其实是没有这个必要的。模仿:想一想,哪里有相似功能...

    最近有一个需求,需要在最近任务页面的一键清除任务按钮中添加一键清除页面缓存的功能,网上找了一圈,看不到什么便捷的版本,基本上是遍历xxx/cache然后删除,其实是没有这个必要的。

    模仿:想一想,哪里有相似功能?原生系统设置的应用信息里。

    代码位置:packages\apps\Settings\src\com\android\settings\applications

    类名:com.android.settings.applications. AppStorageSettings51ebd9ad92af40b1f0a6c13833d91169.png

    看到这个代码时,才发现,原来如此简单。。

    那么这就比较好搞定了。简陋写法:import android.content.pm.IPackageDataObserver;

    import android.content.pm.PackageInfo;

    import android.content.pm.PackageManager;

    import java.util.List;

    import android.os.SystemProperties;

    privateClearCacheObserver mClearCacheObserver;

    voidclearAllAplicationCache(){

    newThread(newRunnable() {

    @Override

    public voidrun() {

    PackageManager packageManager = getPackageManager();

    List packageInfos = packageManager.getInstalledPackages(0);

    if(packageInfos != null) {

    for(inti = 0; i < packageInfos.size(); i++) {

    String packName = packageInfos.get(i).packageName;

    // Lazy initialization of observerif(mClearCacheObserver==null) {

    mClearCacheObserver= newClearCacheObserver();

    }

    packageManager.deleteApplicationCacheFiles(packName, mClearCacheObserver);

    }

    }

    }

    }).start();

    }

    classClearCacheObserver extendsIPackageDataObserver.Stub {

    @Override

    public voidonRemoveCompleted(finalString packageName, final booleansucceeded) {

    Log.d(TAG, packageName + " onRemoveCacheCompleted: "+ succeeded);

    }

    }

    另外附上,清除默认打开方式的代码:PackageManager packageManager = getPackageManager();

    List packageInfos = packageManager.getInstalledPackages(0);

    if(packageInfos != null) {

    for(inti = 0; i < packageInfos.size(); i++) {

    String packName = packageInfos.get(i).packageName;

    packageManager.clearPackagePreferredActivities(packName);

    try{

    IBinder b = ServiceManager.getService(Context.USB_SERVICE);

    IUsbManager mUsbManager = IUsbManager.Stub.asInterface(b);

    mUsbManager.clearDefaults(packName, UserHandle.myUserId());

    } catch(RemoteException e) {

    e.printStackTrace();

    }

    }

    }

    至于, 怎么在最近任务界面加一键清除按钮,这里就不说了,附上一篇文章:

    展开全文
  • http://download.csdn.net/detail/yyh352091626/9196107 基于 LeBron_Six 源码修改,先前的代码只能在Android studio上运行,这几天发了点时间移植到eclipse ,只留下了内存清理缓存清理。其他的都屏蔽了,如果需要...
  • 主要介绍了Android 一键清理、内存清理功能实现,非常具有实用价值,需要的朋友可以参考下。
  • Android一键清理原理

    千次阅读 2018-08-31 18:15:41
    在总篇中提到过垃圾清理,本篇将着重介绍针对缓存、卸载残留、无用数据等“静态内容”的清理,有关于系统进程的清理以及手机加速的相关功能,将放到《手机加速篇》中介绍研究。   什么是垃圾   关于系统垃圾的...

    转自:https://blog.csdn.net/wds1181977/article/details/51142565?locationNum=3&fps=1

    说明

     

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

     

    什么是垃圾

     

    关于系统垃圾的定义


    现在很多手机管理软件中都有垃圾清理的功能,本篇也来对垃圾清理做一个简单的分析和介绍。在正式分析之前,让我们首先看一下“什么叫系统垃圾?”。在百度本科中,关于“系统垃圾”是这样定义的:系统垃圾,就是系统不再需要的文件的统称。当你浏览过网页,安装后又卸载掉的程序残留文件及注册表的键值。这些都是对系统毫无作用的文件,只能给系统增加负担,所以叫垃圾。

    关于系统垃圾其实就一句话”所有我们所不再需要的资源、文件、缓存,就是垃圾”。我们清理系统垃圾就是要清理掉这些不再需要的文件。

     

    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.       映射表的建立:需要对使用频率和用户量较高的应用建立映射表。这里最好有后台提前扫描应用建立,然后下发给客户端;也可以客户端先上报信息到后台,后台修正。映射表的建立是识别的关键。

    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”,这个目录存放的是系统图片的缓存。清理缓存主要就是清理这个目录。应用目录也可能有缩略图文件,但不容易识别,所以不建议清理,可以放在清理残留数据时一起清理。

     

    清理失效文件与空白文件

     

     

    判断标准:

    A.       文件的长度为0则认为是空白文件,可以删除

    B.       文件夹中不包含任何文件或文件夹,则认为是空白文件夹,可以删除。

    C.       除了上面两种情况外,还可以扫描文件的创建时间,很长时间未使用的文件认为是无效文件。

     

     

    大文件清理

     

     

    对于大文件的识别比较简单,只判断文件大小是否超过一定的阀值(例如:豌豆荚认为大小超过10M即为大文件)即可。但这里有两个需要注意的点:

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

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

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

     

     

    总结

     

     

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

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

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

     

    最后,希望本文能够给所有对垃圾清理和手机管理感兴趣的朋友带来一点帮助,将荣幸之至。有任何问题欢迎交流和讨论。下一篇将介绍《手机加速》

    展开全文
  • superCleanMaster - 一键清理开源版,包括内存加速,缓存清理,自启管理,软件管理等。
  • android一键缓存杀进程Demo

    热门讨论 2014-07-25 13:58:30
    在网上找到相关资料,然后写了这个demo,实验一键清除缓存成功!
  • android一键清除缓存

    2016-01-05 15:49:51
    在设置中常见的一键清除缓存,需要的可以下载,直接放过去
  • Android设备中,我们经常会看到与系统或者应用相关的清除功能有:清除数据、清除缓存一键清理,这么多清除功能对于一个程序猿就够难理解了,偏偏很多安卓设备上都有这些功能,对于用户来说就更难理解,趁着在...
  • 本项目是一个基于安卓的开源一键清理项目源码,支持root后进行强力清理。不过项目是使用android studio开发的工程,eclipse需要自己转工程才可以导入。实现的功能有:基本功能、内存加速、缓存清理、自启管理、软件...
  • 本项目是一个基于安卓的开源一键清理项目源码,支持root后进行强力清理。不过项目是使用android studio开发的工程,eclipse需要自己转工程才可以导入。实现的功能有:基本功能、内存加速、缓存清理、自启管理、软件...
  • 软件介绍垃圾一键清理大师APP是一款专注安卓智能手机垃圾清理,内存释放,手机运行加速的专业手机清理软件。只需要几秒钟,您的手机将运行得更快!增加更多常用工具和生活查询工具,用着省心,...
  • 大家好,我是薇薇(*╹▽╹*)经常听使用安卓手机的小伙伴说,手机内存越来越小,没有安装多少软件手机内存空间就没有了,安卓党活该这么苦逼么?今天就给大家分享一款可以深度清理内存的小工具,让你手机的内存饱满...
  • 一键清理工具类:主要清理 1.系统的内存 2.App的缓存 3.系统的临时文件 .apk .log .tmp .temp .backpackage com.hitv.process;import
  • 点击上方蓝色字体,关注我呗安卓清理君是一款安卓手机的强力清理软件,能够给我们的手机深度清理,这款是永久高级版本,无需付费没有广告,轻松的整理我们的手机,释放手机内存,管理文件,让手机运行更快哦!...
  • Android特效专辑(七)——飞机升空特效,一键清理缓存,灵活运用属性动画 最近的几篇博文反响还不错,也会继续的写下去的,关于这些特效的专辑,大多数也是借鉴大神的,最近由于工作的关系,会深入的了解...
  • 111_一键清理缓存

    2014-08-04 15:03:33
    /mobilesafe/src/android/content/pm/ IPackageDataObserver.aidl 二、Activities中 public void cleanAll(View view) { try { Method[] ms = PackageManager.class.getDeclaredMethods...
  •  一键清理通过最专业最高效的清扫机制,快速准确扫描手机中的各类垃圾残留,并采用最简单最易用的一键清理方式,轻轻点一点,垃圾一扫光,干净不留痕。  功能特性缓存清理:快速扫描程序使用产生的缓存垃圾,清理...
  • 安卓一键清理工具

    2017-07-27 11:08:19
    一键清理工具类:主要清理 1.系统的内存 2.App的缓存 3.系统的临时文件 .apk .log .tmp .temp .back package com.hitv.process; import java.io.BufferedReader; import java.io.File; import java.io....
  • Android特效专辑(七)——飞机升空特效,一键清理缓存,灵活运用属性动画 最近的几篇博文反响还不错,也会继续的写下去的,关于这些特效的专辑,大多数也是借鉴大神的,最近由于工作的关系,会深入的了解一下...
  • 系统已经占据了系统市场的半壁江山,由于其自身的开放性,同时能够自由地重装系统,所以受到了很多手机用户的欢迎,但是安卓也有很多的漏洞,由于我们在每天使用手机的时候会产生大量的系统垃圾,那么清理的时候就很...
  • Android 进阶】一键清理

    千次阅读 2017-06-13 16:14:25
    一键清理流程图系统缓存分析Android 已安装 app /data/data/packagename/cache 文件夹和 /sdcard/Android/data/packagename/cache 文件夹组成原生设置(Settings) - 已安装应用 - 详情页 Settings APP 使用了 ...
  • 今天给大家推荐的这款软件是猎豹清理大师v7.2.9去广告高级版。该软件可以说是比较专业的垃圾清理软件了,在Google Play已经被下载超过了10亿次。软件体验会员功能全部免费使用,这个是不需要进行付费的版本,会员...
  • 昨天一期《海外 Apple ID 不用注册,也...关于清理手机内存的方法,早期艾锋科技公众号也有分享过《清理手机内存教程》,只不过告知你,下载一款名为:清理君App,它可实现一键清理内存,而这款APP已经在App Store下...
  • Android Studio 中清理缓存的两种方式

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,646
精华内容 658
关键字:

安卓一键清理缓存