博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android清理设备内存具体完整演示样例(一)
阅读量:6207 次
发布时间:2019-06-21

本文共 7661 字,大约阅读时间需要 25 分钟。

MainActivity例如以下:
package come.on;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;/** * Demo描写叙述: * 内存清理及内存工具类 * 详细代码參见工具类MemoryUtils *  */public class MainActivity extends Activity {	private Button mButton;	private Context mContext;	private EditText mEditText;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        init();    }        private void init(){    	mContext=this;    	Intent intent=new Intent("come.on.service");    	//该Service无用,可去掉    	startService(intent);    	    	mEditText=(EditText) findViewById(R.id.editText);    	mButton=(Button) findViewById(R.id.button);    	mButton.setOnClickListener(new OnClickListener() {			@Override			public void onClick(View v) {		        MemoryUtils.cleanMemory(mContext,mEditText);			}		});    }   }
MemoryUtils例如以下:
package come.on;import java.util.List;import java.io.FileReader;import android.os.Process;import java.io.IOException;import java.io.BufferedReader;import android.widget.EditText;import android.content.Context;import java.io.InputStreamReader;import android.app.ActivityManager;import android.content.ComponentName;import android.app.ActivityManager.MemoryInfo;import android.app.ActivityManager.RunningTaskInfo;import android.app.ActivityManager.RunningAppProcessInfo;/** * 文档描写叙述: * 内存工具类 *  * 包含内容: * 1 内存清理即杀掉进程的几种方式 * 2 获取内存总大小及其可用大小 * 3 推断栈顶Activity名及其所属进程名 *  * 注意权限: * 
*
* * 文档日期: * 2014年5月30日10:01:55 * */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
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
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
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); } }
ServiceSubclass例如以下:
package come.on;import android.app.Service;import android.content.Intent;import android.os.IBinder;public class ServiceSubclass extends Service {	@Override	public IBinder onBind(Intent intent) {		return null;	}		@Override	public void onCreate() {		super.onCreate();		System.out.println("---> Service的 onCreate()");	}		@Override	public void onStart(Intent intent, int startId) {		super.onStart(intent, startId);		System.out.println("---> Service的 onStart()");	}}
main.xml例如以下:
AndroidManifest.xml例如以下:

转载地址:http://xowja.baihongyu.com/

你可能感兴趣的文章
OI基础系列之最大子数组问题
查看>>
Zookeeper概述、特点、数据模型
查看>>
Nginx_lua
查看>>
微信公众号自动回复加超链接最新可用实现方案
查看>>
error: stray '\343' in program 问题解决
查看>>
小强的HTML5移动开发之路(43)——JqueryMobile页眉、工具栏和标签栏导航
查看>>
为什么说任何基于比较的算法将 5 个元素排序都需要 7 次?
查看>>
redis 持久化
查看>>
几种去除数组中重复元素的方法、数组去重
查看>>
C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)
查看>>
C#的特性Attribute
查看>>
Java 编程下 Eclipse 如何设置单行代码显示的最大宽度
查看>>
【BZOJ1001】[BeiJing2006]狼抓兔子
查看>>
我的程序员之路(一) 分类: 程序人生 201...
查看>>
HTTP Methods: GET v.s POST
查看>>
onmousemove和onmouseout事件的调用,和js使用双引号、单引号的时候应该注意的问题...
查看>>
COM组件的运行机制
查看>>
sql server 2008 身份验证失败 18456
查看>>
广义表
查看>>
支持向量机SVM算法原理及应用(R)
查看>>