这两天在搞个内存清理小插件,网上很少这方面资料,之前找过清理缓存的例子测试,结果不成功。后来自己思考该怎么清理内存,于是成功搞出来了。
这两个方法是网上拷别人的,分别用来得到可用内存和内存总数,这样我们就可用得到了已用内存数。
-
private long getAvailMemory(Context context)
-
{
-
// 获取android当前可用内存大小
-
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
-
MemoryInfo mi = new MemoryInfo();
-
am.getMemoryInfo(mi);
-
//mi.availMem; 当前系统的可用内存
-
-
//return Formatter.formatFileSize(context, mi.availMem);// 将获取的内存大小规格化
-
return mi.availMem/(1024*1024);
-
}
-
-
private long getTotalMemory(Context context)
-
{
-
String str1 = "/proc/meminfo";// 系统内存信息文件
-
String str2;
-
String[] arrayOfString;
-
long initial_memory = 0;
-
-
try
-
{
-
FileReader localFileReader = new FileReader(str1);
-
BufferedReader localBufferedReader = new BufferedReader(
-
localFileReader, 8192);
-
str2 = localBufferedReader.readLine();// 读取meminfo第一行,系统总内存大小
-
-
arrayOfString = str2.split("\\s+");
-
for (String num : arrayOfString) {
-
Log.i(str2, num + "\t");
-
}
-
-
initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;// 获得系统总内存,单位是KB,乘以1024转换为Byte
-
localBufferedReader.close();
-
-
} catch (IOException e) {
-
}
-
//return Formatter.formatFileSize(context, initial_memory);// Byte转换为KB或者MB,内存大小规格化
-
return initial_memory/(1024*1024);
-
}
复制代码
在Service里面清理内存
自己写的小方法,通过判断进程信息来判断哪些进程是无用的可用杀掉
-
ActivityManager activityManger=(ActivityManager) this.getSystemService(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);
-
-
System.out.println("pid "+apinfo.pid);
-
System.out.println("processName "+apinfo.processName);
-
System.out.println("importance "+apinfo.importance);
-
String[] pkgList=apinfo.pkgList;
-
-
if(apinfo.importance>ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE)
-
{
-
// Process.killProcess(apinfo.pid);
-
for(int j=0;j<pkgList.length;j++)
-
{
-
//2.2以上是过时的,请用killBackgroundProcesses代替
-
activityManger.restartPackage(pkgList[j]);
-
}
-
}
复制代码
解析如下:
RunningAppProcessInfo 得到正在运行的进程信息
pkgList:得到该进程下运行的包名
importance:该进程的重要程度
importance分为几个级别,数值越低就越重要。数值对应的重要性请看api,我判断是大于ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE的都杀掉,一般数值大于ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE的进程都长时间没用或者空进程了。
最后通过for循环把包名对应进程杀掉:
2.2版本以下的用activityManger.restartPackage(pkgList[j]); 对应权限<uses-permission android:name="android.permission.RESTART_PACKAGES" />
2.2以上的用killBackgroundProcesses(包名); 对应权限<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
之前我以为可用android.os.Process.killProcess(pid);来杀掉其他进程,后来发觉不行
网上找到的解析是
对于这个方法,需要详细解释一下。在SDK的文档中,解释如下:
Kill the process with the given PID. Note that, though this API allows us to request to kill any process
based on its PID, the kernel will still impose standard restrictions on which PIDs you are actually able to kill. Typically this means only the process running the caller's packages/application and any additional processes created by that app; packages sharing
a common UID will also be able to kill each other's processes.
英语不好,不能准确翻译,所以希望大家自己理解,免得对大家造成误解。我个人对这句话的解释就是,这个方法使用是有条件的:
a、将被杀掉的进程 和 当前进程 处于同一个包或者应用程序中;
b、将被杀掉的进程 是由当前应用程序所创建的附加进程;
c、将被杀掉的进程 和 当前进程 共享了普通用户的UID。(这里的普通用户,是相对于Root权限的用户来说的)
分享到:
相关推荐
安卓手机内存清理 开源版,包括内存加速,垃圾清理,自启管理,软件管理等。 说明 >现修复android5.0以上不能查看进程的问题,暂时不能支持7.0的查看进程的功能,欢迎各位提出相应的意见或建议,如不能配置好环境,...
http://download.csdn.net/detail/yyh352091626/9196107 基于 LeBron_Six 源码修改,先前的代码只能在Android studio上运行,这几天发了点时间移植到eclipse ,只留下了内存清理和缓存清理。其他的都屏蔽了,如果需要...
是关于android的一些网络摘抄,便于自己查看
清理释放Android 安卓手机内存空间方法教程
android实现火箭动画清理内存 文章中主要用到两个类:Animation和ActivityManager
实现的功能有:基本功能、内存加速、缓存清理、自启管理、软件管理、设备信息等。项目用到的开源项目有:Open source projects、ButterKnife、changelog、smoothprogressbar、ListViewAnimations、LDrawer、...
很多时候android原生的控件都不能满足我们的需求,比如说我们要实现一个内存清理按钮,这时就需要我们自定义一个控件了。
一个简单的Android内存清理示例。可以下载下去看看,还是挺实用的。
superCleanMaster - 一键清理开源版,包括内存加速,缓存清理,自启管理,软件管理等。
稍加改动可仿造360,手机管家,金山等一键清理进程 Android 进程清理
一个给开发者使用的 Android App 内存清理、监控工具
主要介绍了Android 一键清理、内存清理功能实现,非常具有实用价值,需要的朋友可以参考下。
内存卡垃圾缓存清理Android系统最专业SD卡垃圾深度清理工具。 支持清理SD卡中临时垃圾文件,比如系统日志,debug文件,可以让SD卡更干净,让手机摆脱卡顿、发热等问题。 需要root权限。 内存卡垃圾及缓存清理工具,...
用过猎豹清理大师或者相类似的安全软件,大家都知道它们都会有一个功能,那就是内存清理,而展现的形式是通过一个圆形的小球来显示内存大小,通过百分比数字以及进度条的形式来显示清理的进度。本文将对该效果的实现...
手机清理和内存加速,是一个免费的应用程序,可以帮助清除多余的应用程序和文件,释放存储空间,清理内存,加快您的Android设备。 只需要几秒钟,您的手机将运行得更快! 手机清理亮点: ☆ 方便: 优化您的Android...
MemoryClean
仿百度安全卫士内存清理特效 博客地址cutler.github.io ,相关博文:《UI篇 第九章 高级控件》