这两天在搞个内存清理小插件,网上很少这方面资料,之前找过清理缓存的例子测试,结果不成功。后来自己思考该怎么清理内存,于是成功搞出来了。
这两个方法是网上拷别人的,分别用来得到可用内存和内存总数,这样我们就可用得到了已用内存数。
-
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的查看进程的功能,欢迎各位提出相应的意见或建议,如不能配置好环境,...
### Android内存管理与系统资源获取方法 #### 一、通过读取特定文件获取系统资源信息 在Android系统中,为了方便开发者对系统状态进行监控,提供了多个特殊文件,通过读取这些文件,可以获取到系统的内存、CPU等...
#### 一、了解Android内存管理机制 首先,我们需要了解Android系统的内存管理机制。Android系统会自动管理应用进程,当系统内存紧张时,会自动终止后台不活跃的应用进程,释放其占用的内存资源。但这种自动管理有时...
http://download.csdn.net/detail/yyh352091626/9196107 基于 LeBron_Six 源码修改,先前的代码只能在Android studio上运行,这几天发了点时间移植到eclipse ,只留下了内存清理和缓存清理。其他的都屏蔽了,如果需要...
Android内存清理通常包括以下几个方面: 1. **避免内存泄漏**:内存泄漏是指不再使用的对象由于某些原因无法被GC回收。开发者应避免创建静态单例、匿名内部类以及非静态内部类等可能导致内存泄漏的模式。使用工具如...
在Android平台上,开发一款“一键清理后台”应用可以帮助用户快速释放设备内存,提高系统运行速度。这个功能通常包括清理正在运行的应用程序、终止不必要的服务以及管理后台进程。下面将详细介绍如何在Android 4.4...
"自定义内存清理控件"是一个特定的场景,它涉及到如何在Android系统中创建一个能够执行内存清理功能的用户界面元素。下面将详细介绍这个过程,以及相关的知识点。 首先,我们需要了解Android控件的基础知识。...
一、Android内存构成 Android系统的内存主要分为以下几个部分: 1. Dalvik/ART堆:这是Android应用运行时内存,存储着Java对象。 2. Native堆:C/C++代码使用的内存区域。 3. 图像缓存:用于存储图片资源,如Bitmap...
在Android平台上,开发一款名为"superCleanMaster"的一键清理工具是常见的实践,它整合了多项功能以优化设备性能,如内存加速、缓存清理、自启动管理以及软件管理。这款开源版本允许开发者深入理解其内部工作原理,...
"android实现火箭动画清理内存"这个主题就是关于如何在Android应用程序中结合火箭动画来模拟一个内存清理的过程,从而为用户提供一种直观且有趣的交互方式。在这个过程中,我们将深入探讨`Animation`类和`...
【Android代码-MemoryClean安卓内存清理】 在移动设备领域,Android操作系统因其开源特性和灵活性而备受开发者喜爱。MemoryClean是一款针对Android平台设计的内存清理工具,它的主要目标是帮助用户优化设备性能,...
以下是几个导致Android内存泄漏的主要因素及其相关知识点。 1. 引用没有释放造成的内存泄漏 在Android开发中,如果不正确地管理对象引用,可能会导致内存泄漏。例如,如果一个Activity持有某个服务、广播接收器或...
**Node.js在Android App内存清理监控中的应用** Node.js,作为一个强大的JavaScript运行环境,通常用于构建服务器端应用程序。然而,这个技术同样可以被创造性地应用于移动开发领域,尤其是在Android平台上进行性能...
实现的功能有:基本功能、内存加速、缓存清理、自启管理、软件管理、设备信息等。项目用到的开源项目有:Open source projects、ButterKnife、changelog、smoothprogressbar、ListViewAnimations、LDrawer、...
内存清理球是一款专门为Android系统设计的应用程序,它集成了自定义的水波扩散视图效果和内存加速功能。这个应用的特色在于其独特的用户界面,其中的“水波扩散”效果为用户带来了视觉上的新颖体验,同时在功能性上...
在Android应用开发中,缓存管理是至关重要的一个环节,它关系到应用的性能、内存使用以及用户体验。本文将深入探讨如何实现Android app的缓存清理,并基于提供的"CacheClear"压缩包文件,讲解如何封装一个获取和清理...
在Android系统中,一键清理和内存清理功能是提高设备性能和优化电池寿命的重要工具。这些功能通常用于结束不必要的后台进程,释放系统资源,为用户提供更流畅的设备体验。以下将详细解析实现这些功能的关键步骤和...
1. Android内存管理:了解Android进程和内存生命周期,如何有效地释放内存,避免内存泄漏,以及如何使用Activity和Fragment的生命周期方法来管理资源。 2. 自定义视图:学习如何创建自定义的UI组件,以实现独特的...
本文将深入探讨Android系统的内存与缓存清理,帮助用户理解这两个概念以及如何有效地进行清理。 首先,我们需要理解“内存”和“缓存”的基本含义。内存,通常指的是RAM(随机存取存储器),是手机运行应用程序时...
内存泄露在Android开发中是一个非常重要的问题,因为它可能导致应用程序运行缓慢、消耗过多资源甚至崩溃。Android Studio提供了多种工具帮助开发者检测和解决内存泄露,其中包括Memory Profiler和LeakCanary。 ...