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名及其所属进程名
*
* 注意权限:
* <uses-permission android:name="android.permission.GET_TASKS"/>
* <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
*
* 文档日期:
* 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<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);
} }

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例如以下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="測试内存清理"
android:layout_centerHorizontal="true"
android:layout_marginTop="25dip"
android:textSize="20sp"
/> <EditText
android:id="@+id/editText"
android:layout_width="160dip"
android:layout_height="50dip"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dip"
android:gravity="center"
android:textSize="20sp"
/> <Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="清理内存"
android:layout_centerInParent="true"
android:textSize="20sp"
/> </RelativeLayout>

AndroidManifest.xml例如以下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="come.on"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.GET_TASKS"/> <application
android:icon="@drawable/a"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".MainActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".ServiceSubclass">
<intent-filter>
<action android:name="come.on.service"/>
</intent-filter>
</service>
</application> </manifest>

Android清理设备内存具体完整演示样例(一)的更多相关文章

  1. Android清理设备内存具体完整演示样例(二)

    版权声明: https://blog.csdn.net/lfdfhl/article/details/27672913 MainActivity例如以下: package cc.c; import j ...

  2. FutureTask使用完整演示样例

    MainActivity例如以下: package cc.cv; import java.util.concurrent.FutureTask; import android.os.Bundle; i ...

  3. Android平台调用Web Service:演示样例

    近期在学习Android,随着移动设备的流行,当软件走上商业化的道路,为了争夺市场,肯定须要支持Android的,所以開始接触了Android,只是仅仅了解皮毛就好,由于我们要做管理者嘛,懂点Andr ...

  4. 通过Canvas及File API缩放并上传图片完整演示样例

    创建一个只管的用户界面,并同意你控制图片的大小.上传到server端的数据,并不须要处理enctype为 multi-part/form-data 的情况.只一个简单的POST表单处理程序就能够了. ...

  5. Android图片旋转,缩放,位移,倾斜,对称完整演示样例(一)——imageView.setImageMatrix(matrix)和Matrix

    MainActivity例如以下: import android.os.Bundle; import android.view.MotionEvent; import android.view.Vie ...

  6. Android之——流量管理程序演示样例

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47680811 眼下.市面上有非常多管理手机流量的软件,能够让用户实时获取到自己手机 ...

  7. 构造Scala开发环境并创建ApiDemos演示样例项目

    从2011年開始写Android ApiDemos 以来.Android的版本号也更新了非常多,眼下的版本号已经是4.04. ApiDemos中的样例也添加了不少,有必要更新Android ApiDe ...

  8. Android利用Volley异步载入数据完整具体演示样例(二)

    MainActivity例如以下: package cc.y; import android.app.Activity; import android.content.Context; import ...

  9. 10分钟理解Android数据库的创建与使用(附具体解释和演示样例代码)

    1.Android数据库简单介绍. Android系统的framework层集成了Sqlite3数据库.我们知道Sqlite3是一种轻量级的高效存储的数据库. Sqlite数据库具有以下长处: (1) ...

随机推荐

  1. 最大似然预计(Maximum likelihood estimation)

    一.定义     最大似然预计是一种依据样本来预计模型參数的方法.其思想是,对于已知的样本,如果它服从某种模型,预计模型中未知的參数,使该模型出现这些样本的概率最大.这样就得到了未知參数的预计值. 二 ...

  2. Thinking in UML 学习笔记(一)——建立对象模型

    一.面向对象的本质 面向对象的本质是抽象,当系统达到了超越其处理能力的程度,我们能够抽象出我们能够处理的范围来提成抽象级别,这样就能够构建更大.更复杂的系统. 现实世界和对象世界之间存在着一道沟壑,这 ...

  3. (摘录)26个ASP.NET常用性能优化方法

    数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池(Co ...

  4. Extjs实现树形结构三连选

    当项目中需要一个部门人员选择或者省市县地域连选时,就需要树形结构的连选. 再此,写了一个简单的树形结构三连选功能,模拟从后台读取数据和处理数据(欢迎大家交流指正). 代码如下: 循环创建三棵树,其中只 ...

  5. Swift - 内存泄露原因(循环强引用)及解决办法

    Swift使用自动引用计数(ARC)来管理应用程序的内存使用.在大多是情况下,并不需要考虑内存的管理.当实例不再需要的时候,ARC会自动释放这些实例所使用的内存. 但ARC并不是绝对安全的.下面两种情 ...

  6. Android滑动菜单框架完全解析,教你如何一分钟实现滑动菜单特效

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744400 之前我向大家介绍了史上最简单的滑动菜单的实现方式,相信大家都还记得.如 ...

  7. 微信JSAPI支付(比较详细) 关于getRrandWCPayRequest:fail_invalid appid 错误

    原文:微信JSAPI支付(比较详细) 关于getRrandWCPayRequest:fail_invalid appid 错误 首先微信支付需注册  微信公从平台开发 和 微信支付商户平台 关于4个密 ...

  8. c# 使用OracleParameter,同时使用replace函数

    也算不上是手误吧,这个问题竟然困扰了我那么多天,就是更新代码的时候,使用replace,但是oracle在.net下竟然是不支持汉字,所谓使用类似update x set y='m' where y= ...

  9. jQuery事件大全

    jQuery事件大全 attribute:  $(" p" ).addclass(css中定义的样式类型) 给某个元素添加样式 $(" img" ).attr( ...

  10. delphi 网页提交按钮执行点击事件

    遍历即可实现,下列代码仅供参考: var i: integer; T: OleVariant; begin T := WebBrowser1.Document; do begin if T.all.i ...