2023年11月26日发(作者:)

Android⼀键清理内存,缓存,⽂件代码

⼀键清理⼯具类:主要清理 1.系统的内存 的缓存 3.系统的临时⽂件 .apk .log .tmp .temp .back

package s;

import edReader;

import ;

import putStream;

import ader;

import ;

import lFormat;

import ist;

import ;

import tyManager;

import Info;

import gAppProcessInfo;

import gTaskInfo;

import t;

import ;

import tyInfo;

import ationInfo;

import geDataObserver;

import geStatsObserver;

import eInfo;

import eManager;

import eStats;

import tFoundException;

import le;

import Exception;

import ;

/**

* @author DongYinPing 1045612812@

* @version 1.0 ⼀键清理⼯具类:主要清理 1.系统的内存 的缓存 3.系统的临时⽂件 .apk .log .tmp .temp;

* */

public class CleanUtils {

private Context cx;

private ActivityManager am;

private PackageManager pm;

public CleanUtils(Context context) {

super();

cx = context;

am = (ActivityManager) temService(TY_SERVICE);

pm = kageManager();

}

(""); // 定时锁屏管理

(kageName()); // ⾃⼰

(getCurTopPackgeName()); // 过滤正在运⾏的进程

return filterPackgeNames;

}

/**

* 系统剩余的内存

* */

public float getSurplusMemory() {

MemoryInfo info = new Info();

oryInfo(info);

return (float) em / 1024 / 1024;

}

/**

* 系统总内存

* */

public float getTotalMemory() {

String str1 = "/proc/meminfo";

String str2;

String[] arrayOfString;

long initial_memory = 0;

try {

FileReader fileReader = new FileReader(str1);

BufferedReader bufferedReader = new BufferedReader(fileReader, 8192);

str2 = ne();

arrayOfString = ("s+");

initial_memory = f(arrayOfString[1]);

();

} catch (Exception e) {

tackTrace();

}

return (float) (initial_memory / 1024);

}

/**

* 系统内存:当前使⽤百分⽐/字符串格式

* */

public String usePercentNumString() {

float surplus_size = getSurplusMemory();// 剩余MB

float all_size = getTotalMemory();// 总共MB

// ⼩数不⾜2,0补⾜

DecimalFormat decimalFormat = new DecimalFormat("0.00");

String percentnum = decimalFormat

.format((1 - surplus_size / all_size) * 100);

return percentnum;

}

/**

* 系统内存:当前使⽤百分⽐/数字格式

* */

public float usePercentNum() {// ⽤于清理后UI更新

float surplus_size = getSurplusMemory();// 剩余MB

float all_size = getTotalMemory();// 总共MB

return (1 - surplus_size / all_size) * 100;

}

/**

* 使⽤反射⽅法调⽤系统隐藏apiforceStopPackage 通过包名杀死进程

* */

public boolean forceStopPackageByPackageName(String packageName) {

boolean forceSucceed = false;

Class clazz = ;

Method method;

try {

method = laredMethod("forceStopPackage", );

(am, packageName);

forceSucceed = true;

} catch (Exception e) {

tackTrace();

}

return forceSucceed;

}

/**

* 判断是否属于系统app

* */

public boolean isSystemApp(ApplicationInfo info) {

if (( & _UPDATED_SYSTEM_APP) != 0) {

return false;// 表⽰是系统程序,但⽤户更新过,也算是⽤户安装的程序

} else if (( & _SYSTEM) == 0) {

return false; // ⼀定是⽤户安装的程序

}

return true;

}

/**

* 获取最顶层的app包名,若是⾃⼰,则指定为其上⼀个

* */

public String getCurTopPackgeName() {

String curAppTaskPackgeName = null;

String myPackageName = kageName();

List appTask = ningTasks(_VALUE);

if (() > 0) {

curAppTaskPackgeName = (0).kageName();

if (() > 1) {

if ((myPackageName)

&& (1) != null) {

curAppTaskPackgeName = (1).topActivity

.getPackageName();

}

}

}

return curAppTaskPackgeName;

}

/**

* 遍历所有正在运⾏的进程列表,将所有应⽤的信息传⼊AppInfo

* */

public List getRunningAppProcesses() {

List runningAppProcessInfos = am

.getRunningAppProcesses();// 正在运⾏的进程

List appInfos = new ArrayList();

List filterPackgeName = getFilterPackgeName();

for (RunningAppProcessInfo appProcessInfo : runningAppProcessInfos) {

AppInfo info = new AppInfo();

int id = ;

(id);

String appProcessName = sName;

ilterProcess(ns(appProcessName));// 需过滤的包名

kageName(appProcessName);// 设置进程名

try {

ApplicationInfo applicationInfo = kageInfo(

appProcessName, 0).applicationInfo;

Drawable icon = on(pm);

n(icon);

String name = bel(pm).toString();

e(name);

ystemProcess(isSystemApp(applicationInfo));

Info[] memoryInfo = am

.getProcessMemoryInfo(new int[] { id });

int memory = memoryInfo[0].getTotalPrivateDirty();

orySize(memory);

(info);

info = null;

} catch (Exception e) {

// tackTrace();

e(appProcessName);

ystemProcess(true);

}

}

return appInfos;

}

/**

* 过滤掉系统和⽩名单进程 获取最终要杀死的进程列表

* */

public ArrayList getKillRunningAppProcesses() {

ArrayList killRunningAppProcesses = new ArrayList();

List runningAppProcessInfos = getRunningAppProcesses();// 正在运⾏的进程

for (int i = 0; i < (); i++) {

AppInfo info = (i);

if (!ystemProcess() && !ilterProcess()) {

(info);

}

}

return killRunningAppProcesses;

}

/**

* 遍历进程列表并杀死

* */

public String killProcesses(ArrayList appInfos) {

float killMemorySize = 0;

for (AppInfo appInfo : appInfos) {

if (forceStopPackageByPackageName(kageName())) {

float size = orySize();

Log.d("1----- DYP -----1","killProcesses-->> packageName:" + kageName()+ " | size:" + size);

killMemorySize = killMemorySize + orySize();

}

}

return numToString((float) killMemorySize / 1024);

}

// ################################ 清理⽂件 ###################################

/**

* 获取单个⽂件⼤⼩

* */

public float getFileSize(File file) {

float size = 0;

FileInputStream inputStream = null;

try {

inputStream = new FileInputStream(file);

size = ble();

} catch (Exception e) {

Log.d("--- DYP --- getFileSize", "catch");

// tackTrace();

} finally {

if (inputStream != null) {

try {

();

} catch (ption e) {

tackTrace();

}

}

}

return (float) size / 1024;

}

/**

* 删除⽂件,并返回⽂件⼤⼩

* */

public String deleteFile(List files) {

float allFileSize = 0;

float size = 0;

for (File file : files) {

size = getFileSize(file);

Log.d("3----- DYP -----3", "deleteFile-->> filePath:" + h()+ " | size:" + size);

if(()){

allFileSize = allFileSize + getFileSize(file);

}

}

// ();

return numToString((float) allFileSize / 1024);

}

/**

* 查找指定⽬录下的⽂件,

* */

List fileList = new ArrayList();

public List getallFiles(String sd, String[] clearType) {

try {//遍历可能遇到.开头的⽂件

File file = new File(sd);

if (()) {

File[] files = les();

for (int i = 0; i < ; i++) {

if (files[i].isDirectory()) {

getallFiles(files[i].getAbsolutePath(), clearType);// 递归查找

} else {

for (int j = 0; j < ; j++) {

if (files[i].getAbsolutePath().endsWith((clearType[j]))) {// .apk这些结尾

// if (files[i].getAbsolutePath().endsWith(".apk")) {

// if (isInstallApp(files[i].getAbsolutePath())) {// 安装过可以删除

// (files[i]);

// }

// } else {

// (files[i]);

// }

(files[i]);

}

}

}

}

}

} catch (Exception e) {

// TODO Auto-generated catch block

tackTrace();

}

return fileList;

}

// ################################ 清理缓存 ###################################

float cacheSize = 0;

/**

* 使⽤反射⽅法调⽤系统隐藏api getPackageSizeInfo 获取app缓存⼤⼩

* */

public float getPackageSizeInfo(final String packageName) {

cacheSize = 0;

try {

Method method = hod(

"getPackageSizeInfo", new Class[] { ,

});

(pm, new Object[] { packageName,

new () {

@Override

public void onGetStatsCompleted(PackageStats pStats,

boolean succeeded) throws RemoteException {

cacheSize = ize;

}

} });

} catch (Exception e) {

cacheSize = 0;

// tackTrace();

}

return cacheSize;

}

boolean isCleanCacheSucceed = false;

/**

* 使⽤反射⽅法调⽤系统隐藏api deleteApplicationCacheFiles 返回清除是否成功

* */

private boolean deleteApplicationCacheFiles(String packageName) {

isCleanCacheSucceed = false;

try {

Method method = hod(

"deleteApplicationCacheFiles", new Class[] { ,

});

(pm, packageName, new () {

@Override

public void onRemoveCompleted(String packageName,

boolean succeeded) throws RemoteException {

if(succeeded){

Log.d("DYP", "deleteApplicationCacheFiles -->> succeeded "+succeeded);

Log.d("DYP", "deleteApplicationCacheFiles -->> packageName "+packageName);

}

isCleanCacheSucceed = succeeded;

}

});

} catch (Exception e) {

// tackTrace();

Log.d("DYP", "deleteApplicationCacheFiles -->> catch ");

}

return isCleanCacheSucceed;

}

float allCacheSize = 0;

/**

* 清除所有安装app 返回的总缓存

* */

public String cleanCache(List packageInfos) {

allCacheSize = 0;

for (int i = 0; i < (); i++) {

String packageName = (i).packageName;

if (packageName != null) {

float size = getPackageSizeInfo(packageName);

float size = getPackageSizeInfo(packageName);

//Log.d("2----- DYP -----2", "cleanCache--> packageName:" + packageName+ " | size:" + size);

if(deleteApplicationCacheFiles(packageName)){

allCacheSize = allCacheSize + size;

Log.d("2----- DYP -----2", "cleanCache--> packageName:" + packageName+ " | size:" + size);

}

}

}

return numToString((float) allCacheSize / 1024);

}

/**

* 判断app是否安装

* */

public boolean isInstallApp(String abPath) {

PackageManager pm = kageManager();

try {

kageInfo(abPath, _ACTIVITIES);

return true;

} catch (NameNotFoundException e) {

return false;

}

}

/**

* 获取所有已经安装的应⽤程序 ,包括那些卸载了的,但没有清除数据的应⽤程序

* */

public List getPackageInfos() {

List packageInfos = talledPackages(_UNINSTALLED_PACKAGES);

// List listAppcations = talledApplications(_UNINSTALLED_PACKAGES);

return packageInfos;

}

// ############################# float转化为字符串形式返回 #########################

public String numToString(float f) {

// ⼩数不⾜2,0补⾜

DecimalFormat decimalFormat = new DecimalFormat("0.00");

String s = (f);

return s;

}

// ############################# 开始清理 并返回清理数据的⼤⼩ #########################

/** 清除指定垃圾⽂件 */

String[] clearType = { ".apk", ".log", ".tmp", ".temp", ".bak" };

String SDCARD_ROOT = "/mnt/sdcard";

public String startDeleteFile() {

return deleteFile(getallFiles(SDCARD_ROOT, clearType));

}

public String startCleanCache() {

return cleanCache(getPackageInfos());

}

public String startkillProcesses() {

return killProcesses(getKillRunningAppProcesses());

}

}