package cc.c;import java.io.File;import java.util.List;import android.os.StatFs;import java.io.FileReader;import java.io.IOException;import java.io.BufferedReader;import android.os.Environment;import android.content.Context;import android.app.ActivityManager;import android.app.ActivityManager.MemoryInfo;import android.app.ActivityManager.RunningAppProcessInfo;public class StorageUtil {private static final int ERROR = -1;public static int save_dir = 1;//推断是否已经安装SD卡public static boolean isSDCardExist() {return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);}//内存清理//注意权限://<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />public static void cleanMemory(Context context){System.out.println("---> 清理前可用内存:"+getAvailMemory(context)+"MB");ActivityManager activityManager=(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);RunningAppProcessInfo runningAppProcessInfo=null;List<RunningAppProcessInfo>  runningAppProcessInfoList= activityManager.getRunningAppProcesses();//List<ActivityManager.RunningServiceInfo> serviceInfos = mActivityManager.getRunningServices(100);if (runningAppProcessInfoList != null) {for (int i = 0; i < runningAppProcessInfoList.size(); ++i) {runningAppProcessInfo= runningAppProcessInfoList.get(i);// 一般数值大于RunningAppProcessInfo.IMPORTANCE_SERVICE// 的进程即为长时间未使用进程或者空进程// 一般数值大于RunningAppProcessInfo.IMPORTANCE_VISIBLE// 的进程都是非可见进程,即在后台执行if (runningAppProcessInfo.importance > RunningAppProcessInfo.IMPORTANCE_VISIBLE) {String[] pkgList = runningAppProcessInfo.pkgList;for (int j = 0; j < pkgList.length; ++j) {System.out.println("===> 正在清理:"+pkgList[j]);activityManager.killBackgroundProcesses(pkgList[j]);}}}}System.out.println("---> 清理后可用内存:"+getAvailMemory(context)+"MB");}//获取内存总大小public static long getTotalMemory() {//系统的内存信息文件String filePath = "/proc/meminfo";String lineString;String[] stringArray;long totalMemory = 0;try {FileReader fileReader = new FileReader(filePath);BufferedReader bufferedReader = new BufferedReader(fileReader,1024 * 8);//读取meminfo第一行,获取系统总内存大小lineString = bufferedReader.readLine();//依照空格拆分stringArray = lineString.split("\\s+");//获得系统总内存,单位KBtotalMemory = Integer.valueOf(stringArray[1]).intValue();bufferedReader.close();} catch (IOException e) {}return totalMemory / 1024;}//获取可用内存大小public static long getAvailMemory(Context context) {ActivityManager activityManager=(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);MemoryInfo memoryInfo = new MemoryInfo();activityManager.getMemoryInfo(memoryInfo);return memoryInfo.availMem / (1024 * 1024);}//SD卡剩余空间public static long getAvailableExternalMemorySize() {if (isSDCardExist()) {File path = Environment.getExternalStorageDirectory();StatFs stat = new StatFs(path.getPath());long blockSize = stat.getBlockSize();long availableBlocks = stat.getAvailableBlocks();return availableBlocks * blockSize;} else {return ERROR;}}//SD卡总空间public static long getTotalExternalMemorySize() {if (isSDCardExist()) {File path = Environment.getExternalStorageDirectory();StatFs stat = new StatFs(path.getPath());long blockSize = stat.getBlockSize();long totalBlocks = stat.getBlockCount();return totalBlocks * blockSize;} else {return ERROR;}}//推断SD卡下external_sd目录的总大小public static long getTotalExternal_SDMemorySize() {if (isSDCardExist()) {File path = Environment.getExternalStorageDirectory();File externalSD = new File(path.getPath() + "/external_sd");if (externalSD.exists() && externalSD.isDirectory()) {StatFs stat = new StatFs(path.getPath() + "/external_sd");long blockSize = stat.getBlockSize();long totalBlocks = stat.getBlockCount();if (getTotalExternalMemorySize() != -1&& getTotalExternalMemorySize() != totalBlocks* blockSize) {return totalBlocks * blockSize;} else {return ERROR;}} else {return ERROR;}} else {return ERROR;}}//推断SD卡下external_sd目录的可用大小public static long getAvailableExternal_SDMemorySize() {if (isSDCardExist()) {File path = Environment.getExternalStorageDirectory();File externalSD = new File(path.getPath() + "/external_sd");if (externalSD.exists() && externalSD.isDirectory()) {StatFs stat = new StatFs(path.getPath() + "/external_sd");long blockSize = stat.getBlockSize();long availableBlocks = stat.getAvailableBlocks();if (getAvailableExternalMemorySize() != -1&& getAvailableExternalMemorySize() != availableBlocks* blockSize) {return availableBlocks * blockSize;} else {return ERROR;}} else {return ERROR;}} else {return ERROR;}}}

更多相关文章

  1. android 网络判断的几种方法
  2. 【Android】使用ConnectivityManager与NetworkInfo实现判断当前
  3. 学习笔记 Android(安卓)使用AIDL实现进程间通信
  4. Android(安卓)获得可用摄像头id
  5. [Android]BroadcastQueue如何分发广播(四)
  6. 编程回忆之Android回忆(Android应用参数的获取)
  7. Android中向SD卡读写数据,读SD卡和手机内存
  8. Android中判断网络连接是否可用及监控网络状态
  9. 【Android】隐藏底部虚拟按键,亲测可用

随机推荐

  1. 【Android布局】在程序中设置android:gra
  2. Android系统自带样式(android:theme)解析
  3. 【Android布局】在程序中设置android:gra
  4. android中activity全屏的方法
  5. Android记事本NotePad应用功能拓展(四)
  6. 获取Android(安卓)SDK 源代码并在Eclipse
  7. android TabHost导航切换实现方式
  8. android 兼容所有刘海屏的方案大全
  9. android:maxHeight,android:maxWidth失效
  10. Android(安卓)ListView 去除边缘阴影、选