需要做一个android内存清理的功能。在网上查了好几个方法,都没有一个成功的。求路过的各位帮帮忙。。。
方法一:
public static void clearnCrash1(Context context) {
try {
PackageManager pm = context.getPackageManager();
Method localMethod = pm.getClass().getMethod("freeStorageAndNotify", Long.TYPE, IPackageDataObserver.class);
Long localLong = Long.valueOf(getEnvironmentSize() - 1L);
Object[] arrayOfObject = new Object[2];
arrayOfObject[0] = localLong;
localMethod.invoke(pm, localLong, new IPackageDataObserver.Stub() {
@Override
public void onRemoveCompleted(String packageName,
boolean succeeded) throws RemoteException {
}
});
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
运行出来的时候,总是提示说
java.lang.NoSuchMethodException:freeStorageAndNotify
所以总是调不起来freeStorageAndNotify这个方法。
方法二:
public static void clearnCrash2(String packageName, Context context) {
try {
PackageManager pm = context.getPackageManager();
Method method = pm.getClass().getMethod("deleteApplicationCacheFiles", String.class, IPackageDataObserver.class);
method.invoke(pm, packageName, new IPackageDataObserver.Stub() {
@Override
public void onRemoveCompleted(String packageName,
boolean succeeded) throws RemoteException {
// TODO Auto-generated method stub
}
});
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
网上说这个方法需要获取root权限,但是我现在要在不获取root权限的情况下清理内存,所以这个方法放弃了。
方法三:
public static void onClearMemory(Context context) {
ActivityManager activityManger = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> list = activityManger
.getRunningAppProcesses();
if (list != null)
for (int i = 0; i < list.size(); i++) {
ActivityManager.RunningAppProcessInfo apinfo = list.get(i);
String[] pkgList = apinfo.pkgList;
if (apinfo.importance >=
ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
for (int j = 0; j < pkgList.length; j++) {
if (pkgList[j].equals(context.getPackageName())) {
continue;
}
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO) {
activityManger.restartPackage(pkgList[j]);
} else {
activityManger.killBackgroundProcesses(pkgList[j]);
}
}
}
}
}
方法三执行的时候没有报错,但是清理完毕以后调用
public static long getAvailMemory(Context context) {
// 获取android当前可用内存大小
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
am.getMemoryInfo(mi);
//mi.availMem; 当前系统的可用内存
//return Formatter.formatFileSize(context, mi.availMem);// 将获取的内存大小规格化
return mi.availMem / (1024 * 1024);
}
查看内存的大小,发现清理前后没有任何的变化。这个方法是不是也要有root权限呢?
请问各位路过的大神,在不获取root权限的情况下,应该如何清理内存呢?
类似360手机助手的软件是怎么在没有root的情况下清理内存的呢?
还请各位路过的大神们帮帮忙,谢谢了。。。