- public class MemoryUtils {
- //----------> 以下为杀掉进程的几种方式
- public static void cleanMemory(Context context,EditText editText) {
- long beforeCleanMemory=getAvailMemory(context);
- System.out.println("---> 清理前可用内存大小:"+beforeCleanMemory+"M");
- ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
- RunningAppProcessInfo runningAppProcessInfo = null;
- List<RunningAppProcessInfo> runningAppProcessInfoList = activityManager.getRunningAppProcesses();
- for (int i = 0; i < runningAppProcessInfoList.size(); ++i) {
- runningAppProcessInfo = runningAppProcessInfoList.get(i);
- String processName = runningAppProcessInfo.processName;
- //调用杀掉进程的方法
- System.out.println("---> 开始清理:"+processName);
- killProcessByRestartPackage(context, processName);
- }
- long afterCleanMemory=getAvailMemory(context);
- System.out.println("---> 清理后可用内存大小:"+afterCleanMemory+"M");
- System.out.println("---> 节约内存大小:"+(afterCleanMemory-beforeCleanMemory)+"M");
- editText.setText("共清理:"+(afterCleanMemory-beforeCleanMemory)+"M");
- }
- //利用activityManager.restartPackage()方法杀死进程
- //该方法实际调用了activityManager.killBackgroundProcesses()方法
- public static void killProcessByRestartPackage(Context context,String packageName) {
- ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
- activityManager.restartPackage(packageName);
- System.gc();
- }
- //利用Process.killProcess(pid)杀死进程
- //注意事项:
- //1 该方式可自杀,即杀掉本进程
- //2 该方式可杀掉其他普通应用进程
- //3 该方式不可杀掉系统级应用即system/app应用
- public static void killProcessBykillProcess(int pid){
- Process.killProcess(pid);
- }
- //利用adb shell命令杀死进程
- public static void killProcessByAdbShell(int pid) {
- String cmd = "adb shell kill -9 " + pid;
- System.out.println("-------> cmd=" + cmd);
- try {
- java.lang.Process process = Runtime.getRuntime().exec(cmd);
- InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream());
- BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
- String line = null;
- while ((line = bufferedReader.readLine()) != null) {
- System.out.println("----> exec shell:" + line);
- }
- bufferedReader.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- //利用su进程的命令方式杀死进程
- //1 得到su进程(super进程)
- // Runtime.getRuntime().exec("su");
- //2 利用su进程执行命令
- // process.getOutputStream().write(cmd.getBytes());
- public static void killProcessBySu(int pid) {
- try {
- java.lang.Process process = Runtime.getRuntime().exec("su");
- String cmd = "kill -9 " + pid;
- System.out.println("-------> cmd = " + cmd);
- process.getOutputStream().write(cmd.getBytes());
- if ((process.waitFor() != 0)) {
- System.out.println("-------> su.waitFor()!= 0");
- } else {
- System.out.println("-------> su.waitFor()==0 ");
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- //----------> 以上为杀掉进程的几种方式
- //获取当前进程名
- public static String getCurrentProcessName(Context context) {
- int pid = android.os.Process.myPid();
- ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
- for (RunningAppProcessInfo runningAppProcessInfo : activityManager.getRunningAppProcesses()) {
- if (runningAppProcessInfo.pid == pid) {
- String processName=runningAppProcessInfo.processName;
- return processName;
- }
- }
- return null;
- }
- //获取栈顶Activity名称
- public static String getTopActivityName(Context context) {
- String topActivityName = null;
- ActivityManager activityManager = (ActivityManager) (context.getSystemService(android.content.Context.ACTIVITY_SERVICE));
- List<RunningTaskInfo> runningTaskInfos = activityManager.getRunningTasks(1);
- if (runningTaskInfos != null) {
- ComponentName f = runningTaskInfos.get(0).topActivity;
- String topActivityClassName = f.getClassName();
- String temp[] = topActivityClassName.split("\\.");
- topActivityName = temp[temp.length - 1];
- }
- return topActivityName;
- }
- //获取栈顶Activity所属进程的名称
- public static String getTopActivityProcessName(Context context) {
- String processName = null;
- ActivityManager activityManager = (ActivityManager) (context.getSystemService(android.content.Context.ACTIVITY_SERVICE));
- List<RunningTaskInfo> runningTaskInfos = activityManager.getRunningTasks(1);
- if (runningTaskInfos != null) {
- ComponentName componentName = runningTaskInfos.get(0).topActivity;
- String topActivityClassName = componentName.getClassName();
- int index = topActivityClassName.lastIndexOf(".");
- processName = topActivityClassName.substring(0, index);
- }
- return processName;
- }
- //获取内存总大小
- 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+");
- // 获得系统总内存,单位KB
- totalMemory = 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);
- }
- }
向大家推荐一个好用的 内存清理及内存工具类
最新推荐文章于 2024-08-09 07:47:08 发布