android进程 清理及activity栈管理

MainActivity如下:
  1. package come.on;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.os.Bundle;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.Button;  
  10. import android.widget.EditText;  
  11. /** 
  12.  * Demo描述: 
  13.  * 内存清理及内存工具类 
  14.  * 具体代码参见工具类MemoryUtils 
  15.  *  
  16.  */  
  17. public class MainActivity extends Activity {  
  18.     private Button mButton;  
  19.     private Context mContext;  
  20.     private EditText mEditText;  
  21.     @Override  
  22.     public void onCreate(Bundle savedInstanceState) {  
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.main);  
  25.         init();  
  26.     }  
  27.       
  28.     private void init(){  
  29.         mContext=this;  
  30.         Intent intent=new Intent("come.on.service");  
  31.         //该Service无用,可去掉  
  32.         startService(intent);  
  33.           
  34.         mEditText=(EditText) findViewById(R.id.editText);  
  35.         mButton=(Button) findViewById(R.id.button);  
  36.         mButton.setOnClickListener(new OnClickListener() {  
  37.             @Override  
  38.             public void onClick(View v) {  
  39.                 MemoryUtils.cleanMemory(mContext,mEditText);  
  40.             }  
  41.         });  
  42.     }  
  43.      
  44. }  

MemoryUtils如下:
  1. package come.on;  
  2.   
  3. import java.util.List;  
  4. import java.io.FileReader;  
  5. import android.os.Process;  
  6. import java.io.IOException;  
  7. import java.io.BufferedReader;  
  8. import android.widget.EditText;  
  9. import android.content.Context;  
  10. import java.io.InputStreamReader;  
  11. import android.app.ActivityManager;  
  12. import android.content.ComponentName;  
  13. import android.app.ActivityManager.MemoryInfo;  
  14. import android.app.ActivityManager.RunningTaskInfo;  
  15. import android.app.ActivityManager.RunningAppProcessInfo;  
  16.   
  17. /** 
  18.  * 文档描述: 
  19.  * 内存工具类 
  20.  *  
  21.  * 包括内容: 
  22.  * 1 内存清理即杀掉进程的几种方式 
  23.  * 2 获取内存总大小及其可用大小 
  24.  * 3 判断栈顶Activity名及其所属进程名 
  25.  *  
  26.  * 注意权限: 
  27.  * <uses-permission android:name="android.permission.GET_TASKS"/>   
  28.  * <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" /> 
  29.  *  
  30.  * 文档日期: 
  31.  * 2014年5月30日10:01:55 
  32.  * 
  33.  */  
  34. public class MemoryUtils {  
  35.       
  36.     //----------> 以下为杀掉进程的几种方式  
  37.       
  38.     public static void cleanMemory(Context context,EditText editText) {  
  39.         long beforeCleanMemory=getAvailMemory(context);  
  40.         System.out.println("---> 清理前可用内存大小:"+beforeCleanMemory+"M");  
  41.         ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
  42.         RunningAppProcessInfo runningAppProcessInfo = null;  
  43.         List<RunningAppProcessInfo> runningAppProcessInfoList = activityManager.getRunningAppProcesses();  
  44.         for (int i = 0; i < runningAppProcessInfoList.size(); ++i) {  
  45.             runningAppProcessInfo = runningAppProcessInfoList.get(i);  
  46.             String processName = runningAppProcessInfo.processName;  
  47.             //调用杀掉进程的方法  
  48.             System.out.println("---> 开始清理:"+processName);  
  49.             killProcessByRestartPackage(context, processName);  
  50.         }  
  51.         long afterCleanMemory=getAvailMemory(context);  
  52.         System.out.println("---> 清理后可用内存大小:"+afterCleanMemory+"M");  
  53.         System.out.println("---> 节约内存大小:"+(afterCleanMemory-beforeCleanMemory)+"M");  
  54.         editText.setText("共清理:"+(afterCleanMemory-beforeCleanMemory)+"M");  
  55.     }  
  56.       
  57.       
  58.       
  59.     //利用activityManager.restartPackage()方法杀死进程  
  60.     //该方法实际调用了activityManager.killBackgroundProcesses()方法  
  61.     public static void killProcessByRestartPackage(Context context,String packageName) {  
  62.         ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
  63.         activityManager.restartPackage(packageName);  
  64.         System.gc();  
  65.     }  
  66.       
  67.       
  68.     //利用Process.killProcess(pid)杀死进程  
  69.     //注意事项:  
  70.     //1 该方式可自杀,即杀掉本进程  
  71.     //2 该方式可杀掉其他普通应用进程  
  72.     //3 该方式不可杀掉系统级应用即system/app应用  
  73.     public static void killProcessBykillProcess(int pid){  
  74.         Process.killProcess(pid);  
  75.     }  
  76.       
  77.       
  78.     //利用adb shell命令杀死进程  
  79.     public static void killProcessByAdbShell(int pid) {  
  80.         String cmd = "adb shell kill -9 " + pid;  
  81.         System.out.println("-------> cmd=" + cmd);  
  82.         try {  
  83.             java.lang.Process process = Runtime.getRuntime().exec(cmd);  
  84.             InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream());  
  85.             BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
  86.             String line = null;  
  87.             while ((line = bufferedReader.readLine()) != null) {  
  88.                 System.out.println("----> exec shell:" + line);  
  89.             }  
  90.             bufferedReader.close();  
  91.         } catch (IOException e) {  
  92.             e.printStackTrace();  
  93.         }  
  94.     }  
  95.        
  96.      //利用su进程的命令方式杀死进程  
  97.      //1 得到su进程(super进程)  
  98.      //  Runtime.getRuntime().exec("su");  
  99.      //2 利用su进程执行命令  
  100.      //  process.getOutputStream().write(cmd.getBytes());  
  101.     public static void killProcessBySu(int pid) {  
  102.         try {  
  103.             java.lang.Process process = Runtime.getRuntime().exec("su");  
  104.             String cmd = "kill -9 " + pid;  
  105.             System.out.println("-------> cmd = " + cmd);  
  106.             process.getOutputStream().write(cmd.getBytes());  
  107.             if ((process.waitFor() != 0)) {  
  108.                 System.out.println("-------> su.waitFor()!= 0");  
  109.             } else {  
  110.                 System.out.println("------->  su.waitFor()==0 ");  
  111.             }  
  112.         } catch (Exception e) {  
  113.             e.printStackTrace();  
  114.         }  
  115.   
  116.     }  
  117.       
  118.     //----------> 以上为杀掉进程的几种方式  
  119.       
  120.   
  121.       
  122.       
  123.       
  124.     //获取当前进程名  
  125.     public static String getCurrentProcessName(Context context) {  
  126.         int pid = android.os.Process.myPid();  
  127.         ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
  128.         for (RunningAppProcessInfo runningAppProcessInfo : activityManager.getRunningAppProcesses()) {  
  129.             if (runningAppProcessInfo.pid == pid) {  
  130.                 String processName=runningAppProcessInfo.processName;  
  131.                 return processName;  
  132.             }  
  133.         }  
  134.         return null;  
  135.     }  
  136.       
  137.       
  138.     //获取栈顶Activity名称  
  139.     public static String getTopActivityName(Context context) {  
  140.         String topActivityName = null;  
  141.         ActivityManager activityManager = (ActivityManager) (context.getSystemService(android.content.Context.ACTIVITY_SERVICE));  
  142.         List<RunningTaskInfo> runningTaskInfos = activityManager.getRunningTasks(1);  
  143.         if (runningTaskInfos != null) {  
  144.             ComponentName f = runningTaskInfos.get(0).topActivity;  
  145.             String topActivityClassName = f.getClassName();  
  146.             String temp[] = topActivityClassName.split("\\.");  
  147.             topActivityName = temp[temp.length - 1];  
  148.         }  
  149.         return topActivityName;  
  150.     }  
  151.       
  152.       
  153.       
  154.     //获取栈顶Activity所属进程的名称  
  155.     public static String getTopActivityProcessName(Context context) {  
  156.         String processName = null;  
  157.         ActivityManager activityManager = (ActivityManager) (context.getSystemService(android.content.Context.ACTIVITY_SERVICE));  
  158.         List<RunningTaskInfo> runningTaskInfos = activityManager.getRunningTasks(1);  
  159.         if (runningTaskInfos != null) {  
  160.             ComponentName componentName = runningTaskInfos.get(0).topActivity;  
  161.             String topActivityClassName = componentName.getClassName();  
  162.             int index = topActivityClassName.lastIndexOf(".");  
  163.             processName = topActivityClassName.substring(0, index);  
  164.         }  
  165.         return processName;  
  166.     }  
  167.       
  168.       
  169.       
  170.     //获取内存总大小  
  171.     public static long getTotalMemory() {  
  172.         // 系统的内存信息文件  
  173.         String filePath = "/proc/meminfo";  
  174.         String lineString;  
  175.         String[] stringArray;  
  176.         long totalMemory = 0;  
  177.         try {  
  178.             FileReader fileReader = new FileReader(filePath);  
  179.             BufferedReader bufferedReader = new BufferedReader(fileReader,1024 * 8);  
  180.             // 读取meminfo第一行,获取系统总内存大小  
  181.             lineString = bufferedReader.readLine();  
  182.             // 按照空格拆分  
  183.             stringArray = lineString.split("\\s+");  
  184.             // 获得系统总内存,单位KB  
  185.             totalMemory = Integer.valueOf(stringArray[1]).intValue();  
  186.             bufferedReader.close();  
  187.         } catch (IOException e) {  
  188.         }  
  189.         return totalMemory / 1024;  
  190.     }  
  191.       
  192.       
  193.       
  194.     //获取可用内存大小  
  195.     public static long getAvailMemory(Context context) {  
  196.         ActivityManager activityManager=(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);  
  197.         MemoryInfo memoryInfo = new MemoryInfo();  
  198.         activityManager.getMemoryInfo(memoryInfo);  
  199.         return memoryInfo.availMem / (1024 * 1024);  
  200.     }  
  201.       
  202.   
  203. }  

ServiceSubclass如下:
  1. package come.on;  
  2.   
  3. import android.app.Service;  
  4. import android.content.Intent;  
  5. import android.os.IBinder;  
  6.   
  7. public class ServiceSubclass extends Service {  
  8.   
  9.     @Override  
  10.     public IBinder onBind(Intent intent) {  
  11.         return null;  
  12.     }  
  13.       
  14.     @Override  
  15.     public void onCreate() {  
  16.         super.onCreate();  
  17.         System.out.println("---> Service的 onCreate()");  
  18.     }  
  19.       
  20.     @Override  
  21.     public void onStart(Intent intent, int startId) {  
  22.         super.onStart(intent, startId);  
  23.         System.out.println("---> Service的 onStart()");  
  24.     }  
  25.   
  26. }  

main.xml如下:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.    >  
  6.   
  7.     <TextView  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="测试内存清理"   
  11.         android:layout_centerHorizontal="true"  
  12.         android:layout_marginTop="25dip"  
  13.         android:textSize="20sp"  
  14.      />  
  15.       
  16.     <EditText   
  17.         android:id="@+id/editText"  
  18.         android:layout_width="160dip"  
  19.         android:layout_height="50dip"  
  20.         android:layout_centerHorizontal="true"  
  21.         android:layout_marginTop="100dip"  
  22.         android:gravity="center"  
  23.         android:textSize="20sp"  
  24.         />  
  25.       
  26.     <Button   
  27.         android:id="@+id/button"  
  28.         android:layout_width="wrap_content"  
  29.         android:layout_height="wrap_content"  
  30.         android:text="清理内存"   
  31.         android:layout_centerInParent="true"  
  32.          android:textSize="20sp"  
  33.         />  
  34.       
  35.   
  36. </RelativeLayout>  

AndroidManifest.xml如下:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="come.on"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk android:minSdkVersion="10" />  
  8.       
  9.       
  10.       
  11.       
  12.     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />  
  13.     <uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES" />  
  14.     <uses-permission android:name="android.permission.RECORD_AUDIO" />  
  15.     <uses-permission android:name="android.permission.INTERNET" />  
  16.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  17.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  18.     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />  
  19.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  20.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  21.     <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />  
  22.     <uses-permission android:name="android.permission.GET_TASKS"/>    
  23.       
  24.       
  25.       
  26.   
  27.     <application  
  28.         android:icon="@drawable/a"  
  29.         android:label="@string/app_name" >  
  30.         <activity  
  31.             android:label="@string/app_name"  
  32.             android:name=".MainActivity" >  
  33.             <intent-filter >  
  34.                 <action android:name="android.intent.action.MAIN" />  
  35.   
  36.                 <category android:name="android.intent.category.LAUNCHER" />  
  37.             </intent-filter>  
  38.         </activity>  
  39.         <service android:name=".ServiceSubclass">  
  40.             <intent-filter>  
  41.                 <action android:name="come.on.service"/>  
  42.             </intent-filter>  
  43.         </service>  
  44.     </application>  
  45.   
  46. </manifest> 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.整体项目采用MVC框架,是对android知识点的综合应用,用到的技术有 (activity,service,broadcast,content provider,Notification , 数据库,自定义title,自定义控件,自定义toast,widget,aidl进程间通讯, javascript和java的互相调用等) 2.介绍了listview和gridview等控件的优化技巧,提升软件的效率 3.穿插介绍了企业开发中的bug管理,mantis的使用,自动化测试robotium的使用 ,log管理. 软件的打包,混淆,反编译和三方广告的加入等技巧。 该项目主要涵盖以下几大功能: 手机防盗: 根据预设参数, 判断手机是否被盗,根据自定义协议发送手机中sim卡的信息和手机的位置信息给安全号码. 可以自定义特殊号码,拨号快速进入手机防盗功能,可远程通过短信指令,给手机设置锁屏密码, 远程锁定手机屏幕, 远程格式化手机sd卡,恢复出厂设置,极大的保护用户的隐私安全,通过aidl注册admin设备,一般用户无法卸载该程序。 通讯卫士: 来电号码归属地显示,来电归属地位置调整,来电黑名单/短信黑名单管理. 电话短信备份和还原. 保护手机的数据和通讯安全。 软件管理: 系统软件和本地软件,可以显示软件的详细信息,启动,删除应用程序.连接获取服务器上软件的评分信息等功能。程序锁可以指定要保护的程序, 用户进入要保护的程序之前必须输入密码。 任务管理: 显示当前系统运行的进程信息 显示系统内存信息, 可以杀死某个进程,批量杀死进程,通过桌面widget 实时展现用户当前的手机内存状态。 上网管理: 显示出每个程序wifi和3g/2g 访问的上传和下载的流量,帮助用户了解程序产生的流量信息. 漫游管理. 当检查到手机处于漫游状态时会提示用户。 手机杀毒:从服务器下载最新的病毒库, 根据程序的包名和程序的数字签名识别病毒,提示用户并查杀. 恶意软件,吸费木马无处可藏。 系统优化: 清理手机缓存,提高手机性能,优化电池管理 高级工具: 自动ip拨号,手机号码归属地查询,更改归属地位置,常用号码查询。 安全专题: 1、通过0权限上传下载数据,重启手机等案例,深入讲解android沙箱,安全机制和权限模型。 2、通过分析恶意代码的提权漏洞,讲解如何维护系统的安全。 3、通过linux键盘驱动案例的讲解,分析盗号木马的原理及其实现方式。 4、恶意软件发展速度的确一日千里,安全软件也要与时俱进,世面上的手机病毒已经具有了可以杀掉安全软件的功能, 通过多进程互相守护案例,讲述如何实现安全软件的自我保护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值