android 清理
来源:互联网 发布:无尺度网络模型 编辑:程序博客网 时间:2024/04/29 17:11
先看下面有关android的设备信息,有关Memory量
# cat meminfoMemTotal: 352088 kBMemFree: 15728 kBBuffers: 4232 kBCached: 103788 kBSwapCached: 0 kBActive: 224688 kBInactive: 78044 kBActive(anon): 193220 kBInactive(anon): 2584 kBActive(file): 31468 kBInactive(file): 75460 kBUnevictable: 312 kBMlocked: 0 kBHighTotal: 0 kBHighFree: 0 kBLowTotal: 352088 kBLowFree: 15728 kBSwapTotal: 0 kBSwapFree: 0 kBDirty: 0 kBWriteback: 0 kBAnonPages: 195036 kBMapped: 43684 kBShmem: 780 kBSlab: 7608 kBSReclaimable: 2896 kBSUnreclaim: 4712 kBKernelStack: 3864 kBPageTables: 12632 kBNFS_Unstable: 0 kBBounce: 0 kBWritebackTmp: 0 kBCommitLimit: 176044 kBCommitted_AS: 1889040 kBVmallocTotal: 483328 kBVmallocUsed: 197648 kBVmallocChunk: 260100 kB
dumpsys meminfo -a查看进程的内存使用情况
** MEMINFO in pid 2342 [com.pateo.VoiceRecognition] ** native dalvik other total size: 16600 3271 N/A 19871 allocated: 16298 3014 N/A 19312 free: 233 257 N/A 490 (Pss): 4598 1147 17510 23255 (shared dirty): 1176 1804 2164 5144 (priv dirty): 4564 404 12384 17352 Objects Views: 0 ViewRoots: 0 AppContexts: 0 Activities: 0 Assets: 18 AssetManagers: 18 Local Binders: 36 Proxy Binders: 52Death Recipients: 6 OpenSSL Sockets: 0
下面代码主要为内存的获取接口调用:
public long readAvailMem() { try { long memFree = 0; long memCached = 0; FileInputStream is = new FileInputStream("/proc/meminfo"); int len = is.read(mBuffer); is.close(); final int BUFLEN = mBuffer.length; for (int i=0; i<len && (memFree == 0 || memCached == 0); i++) { if (matchText(mBuffer, i, "MemFree")) { i += 7; memFree = extractMemValue(mBuffer, i); } else if (matchText(mBuffer, i, "Cached")) { i += 6; memCached = extractMemValue(mBuffer, i); } while (i < BUFLEN && mBuffer[i] != '\n') { i++; } } return memFree + memCached; } catch (java.io.FileNotFoundException e) { } catch (java.io.IOException e) { } return 0; } private boolean matchText(byte[] buffer, int index, String text) { int N = text.length(); if ((index+N) >= buffer.length) { return false; } for (int i=0; i<N; i++) { if (buffer[index+i] != text.charAt(i)) { return false; } } return true; } private long extractMemValue(byte[] buffer, int index) { while (index < buffer.length && buffer[index] != '\n') { if (buffer[index] >= '0' && buffer[index] <= '9') { int start = index; index++; while (index < buffer.length && buffer[index] >= '0' && buffer[index] <= '9') { index++; } String str = new String(buffer, 0, start, index-start); return ((long)Integer.parseInt(str))* 1024; } index++; } return 0; }
下面为清理:
public int autoCleanup(int killImportance) { final int sdkVersion = android.os.Build.VERSION.SDK_INT; final ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); final ArrayList<String> blackList = blackListArray(); final ArrayList<String> whiteList = whiteList(); List<ActivityManager.RunningAppProcessInfo> processes = am.getRunningAppProcesses(); int psize = processes.size(); int cleannum = 0; for (int i = 0; i < psize; i++) { String pkgName = processes.get(i).processName; if(pkgName == null) { continue; } if (DEBUG) Log.d(TAG, "process name: " + pkgName + " " + processes.get(i).importance); try { PackageManager pm = mContext.getPackageManager(); ApplicationInfo info = pm.getApplicationInfo(pkgName, PackageManager.GET_UNINSTALLED_PACKAGES | PackageManager.GET_DISABLED_COMPONENTS); if ((((processes.get(i).importance >= killImportance && ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) && !whiteList .contains(pkgName))) || blackList.contains(pkgName)) &&!pkgName.equals(getTopActivy()) ) { String playingPackage = getThirdPlayingPackageName(); if(playingPackage!=null){ if(pkgName.equals(playingPackage)){ continue; } } if (sdkVersion >= 8) { am.killBackgroundProcesses(pkgName); } else { am.restartPackage(pkgName); } cleannum++; if (DEBUG) Log.d(TAG, "kill : " + pkgName + " " + processes.get(i).importance); } } catch (Exception e) { Log.w(TAG, "Exception caught: " + e); } } return cleannum; } public String getTopActivy(){ ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1); String cmpNameTemp = null; if(null != runningTaskInfos){ cmpNameTemp=(runningTaskInfos.get(0).topActivity).getPackageName(); } return cmpNameTemp; }
其中上面的代码blackListArray存储的是黑名单,存储对象为应用包名,whiteList为白名单,getThirdPlayingPackageName为当前播放的多媒体不需要被杀为比较好的策略,
当然你还可以定义一些自己想要的策略
可以通过按键加广播接收方式,如写在一个应用里面然后把自己杀了
android.os.Process.killProcess(android.os.Process.myPid()); System.exit(0);
0 0
- android 清理
- android 垃圾清理 文件清理
- 清理android桌面
- android手机内存清理
- android 缓存 清理
- cmd 清理 android 工程
- Android清理软件缓存
- android 内存清理
- Android 内存清理
- android中清理堆栈
- (转)android 内存清理
- Android 内存清理
- Android内存清理
- Android清理webview缓存
- Android 清理应用缓存
- android清理内存
- android内存清理
- Android 清理应用缓存
- Bus--device--driver驱动模型源码分析
- Leetcode:Max Points on a Line
- 第七周项目一电阻串联
- Eclipse远程调试Tomcat
- 遍历数组 iterator方法和for方法
- android 清理
- 地方性网站从运营和推广两个角度来讲都需要做到哪些方面
- 【环境配置】配置vmware
- 关于tomcat编码不一致问题解决
- 地方性网站从运营和推广两个角度来讲都需要做到哪些方面
- 第七周项目一,电阻串联
- 系统上电复位后GPIO默认输出电平对系统的影响
- 地方性网站从运营和推广两个角度来讲都需要做到哪些方面
- 质量度量指标设定分析-1