(转载)Andoird释放内存
来源:互联网 发布:百度学术查重数据库 编辑:程序博客网 时间:2024/05/22 03:49
此文章转自http://www.apkbus.com/android-19429-1-1.html
这两个方法是网上拷别人的,分别用来得到可用内存和内存总数,这样我们就可用得到了已用内存数。
在Service里面清理内存
自己写的小方法,通过判断进程信息来判断哪些进程是无用的可用杀掉
解析如下:
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权限的用户来说的)
- (转载)Andoird释放内存
- [转载]Linux 释放内存命令
- 谈iframe内存释放问题(转载)
- QList内存释放 (收集转载及编辑)
- linux释放内存(转载+整理)
- [转载]关于CvSeq指针的内存释放问题
- 第八篇:关于释放内存(原创+转载长贴)
- 转载-linux下释放被cache占用的物理内存
- 内存释放
- 释放内存
- 内存释放
- 内存释放
- 释放内存
- 内存释放
- 释放内存
- 内存释放
- 内存管理---内存释放
- 查看 Andoird Native 内存变化 内存泄漏检查
- 要自学的课程
- javac encounter 'java.lang.ClassFormatError' error
- 百度android面试题 .
- HBase简介(很好的梳理资料)
- openoffice 在linux下转换word文档时报错解决
- (转载)Andoird释放内存
- 已安装sql server 2005的电脑上安装Sql server 2008相关
- 关于pc版chrome在retina屏幕下的背景图片bug
- 设计模式学习之简单工厂模式(java)
- mail群发
- hibernateEHCache
- C++ 虚函数表解析
- 23种设计模式(6):模版方法模式
- fork函数