首先看一下界面:

TaskManagerActivity .java
//進程管理
public class TaskManagerActivity extends Activity {@ViewInject(R.id.tv_task_process_count)private TextView tv_task_process_count;@ViewInject(R.id.tv_task_memory)private TextView tv_task_memory;@ViewInject(R.id.list_view)private ListView list_view;private long totalMem;private List<TaskInfo> taskInfos;private List<TaskInfo> userTaskInfos;private List<TaskInfo> systemAppInfos;private TaskManagerAdapter adapter;private int processCount;private long availMem;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);        initUI();initData();}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();        if(adapter != null){adapter.notifyDataSetChanged();}}private class TaskManagerAdapter extends BaseAdapter {@Overridepublic int getCount() {//判断当前用户是否需要显示系统进程,需要就显示,不需要就不显示            boolean result = SharedPreferencesUtils.getBoolean(TaskManagerActivity.this, "is_show_system", false);if(result){return userTaskInfos.size() + 1 + systemAppInfos.size() + 1;}else{return userTaskInfos.size() + 1;}        }@Overridepublic Object getItem(int position) {if (position == 0) {return null;} else if (position == userTaskInfos.size() + 1) {return null;}TaskInfo taskInfo;if (position < (userTaskInfos.size() + 1)) {// taskInfo = userTaskInfos.get(position - 1); } else {// int location = position - 1 - userTaskInfos.size() - 1;taskInfo = systemAppInfos.get(location);}return taskInfo;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (position == 0) {// TextView tv = new TextView(getApplicationContext());tv.setBackgroundColor(Color.GRAY);tv.setTextColor(Color.WHITE);tv.setText("用户进程:" + userTaskInfos.size() + "个");return tv;} else if (position == (userTaskInfos.size() + 1)) {TextView tv = new TextView(getApplicationContext());tv.setBackgroundColor(Color.GRAY);tv.setTextColor(Color.WHITE);tv.setText("系统进程" + systemAppInfos.size() + "个");return tv;}ViewHolder holder;View view;if (convertView != null && convertView instanceof LinearLayout) {view = convertView;holder = (ViewHolder) view.getTag();} else {view = View.inflate(TaskManagerActivity.this,R.layout.item_task_manager, null);holder = new ViewHolder();holder.iv_app_icon = (ImageView) view.findViewById(R.id.iv_app_icon);holder.tv_app_name = (TextView) view.findViewById(R.id.tv_app_name);holder.tv_app_memory_size = (TextView) view.findViewById(R.id.tv_app_memory_size);holder.tv_app_status = (CheckBox) view.findViewById(R.id.tv_app_status);view.setTag(holder);}TaskInfo taskInfo;if (position < (userTaskInfos.size() + 1)) {// taskInfo = userTaskInfos.get(position - 1);} else {// int location = position - 1 - userTaskInfos.size() - 1;taskInfo = systemAppInfos.get(location);}
            holder.iv_app_icon.setImageDrawable(taskInfo.getIcon());holder.tv_app_name.setText(taskInfo.getAppName());holder.tv_app_memory_size.setText("占用内存:"+ Formatter.formatFileSize(TaskManagerActivity.this,taskInfo.getMemorySize()));if (taskInfo.isChecked()) {holder.tv_app_status.setChecked(true);} else {holder.tv_app_status.setChecked(false);}//
            if(taskInfo.getPackageName().equals(getPackageName())){//
                holder.tv_app_status.setVisibility(View.INVISIBLE);}else{//
                holder.tv_app_status.setVisibility(View.VISIBLE);}return view;}}static class ViewHolder {ImageView iv_app_icon;TextView tv_app_name;TextView tv_app_memory_size;CheckBox tv_app_status;}private void initData() {new Thread() {public void run() {taskInfos = TaskInfoParser.getTaskInfos(TaskManagerActivity.this);userTaskInfos = new ArrayList<TaskInfo>();systemAppInfos = new ArrayList<TaskInfo>();for (TaskInfo taskInfo : taskInfos) {if (taskInfo.isUserApp()) {userTaskInfos.add(taskInfo);} else {systemAppInfos.add(taskInfo);}}runOnUiThread(new Runnable() {@Overridepublic void run() {adapter = new TaskManagerAdapter();list_view.setAdapter(adapter);}});};}.start();}private void initUI() {setContentView(R.layout.activity_task_manager);ViewUtils.inject(this);//SystemInfoUtils下文定义processCount = SystemInfoUtils.getProcessCount(this);tv_task_process_count.setText("运行中进程:" + processCount + "个");availMem = SystemInfoUtils.getAvailMem(this);totalMem = SystemInfoUtils.getTotalMem(this);tv_task_memory.setText("剩余/总内存:"+ Formatter.formatFileSize(TaskManagerActivity.this, availMem)+ "/"+ Formatter.formatFileSize(TaskManagerActivity.this, totalMem));list_view.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {//Object object = list_view.getItemAtPosition(position);if (object != null && object instanceof TaskInfo) {TaskInfo taskInfo = (TaskInfo) object;ViewHolder holder = (ViewHolder) view.getTag();if(taskInfo.getPackageName().equals(getPackageName())){return;}if (taskInfo.isChecked()) {taskInfo.setChecked(false);holder.tv_app_status.setChecked(false);} else {taskInfo.setChecked(true);holder.tv_app_status.setChecked(true);}}}});}/*** 全选* * @param view*/public void selectAll(View view) {for (TaskInfo taskInfo : userTaskInfos) {
if (taskInfo.getPackageName().equals(getPackageName())) {continue;}taskInfo.setChecked(true);}for (TaskInfo taskInfo : systemAppInfos) {taskInfo.setChecked(true);}// 数据发生变化,一定要更新
        adapter.notifyDataSetChanged();}/*** 反选* * @param view*/public void selectOppsite(View view) {for (TaskInfo taskInfo : userTaskInfos) {        if (taskInfo.getPackageName().equals(getPackageName())) {continue;}taskInfo.setChecked(!taskInfo.isChecked());}for (TaskInfo taskInfo : systemAppInfos) {taskInfo.setChecked(!taskInfo.isChecked());}adapter.notifyDataSetChanged();}/*** 清理* * @param view*/public void killProcess(View view) {
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<TaskInfo> killLists = new ArrayList<TaskInfo>();//清理的总共进程个数int totalCount = 0;// 释放多少内存int killMem = 0;for (TaskInfo taskInfo : userTaskInfos) {if (taskInfo.isChecked()) {killLists.add(taskInfo);// userTaskInfos.remove(taskInfo);totalCount++;killMem += taskInfo.getMemorySize();}}for (TaskInfo taskInfo : systemAppInfos) {if (taskInfo.isChecked()) {killLists.add(taskInfo);// systemAppInfos.remove(taskInfo);totalCount++;killMem += taskInfo.getMemorySize();//
                activityManager.killBackgroundProcesses(taskInfo.getPackageName());}}/*** 当集合在迭代的时候,不能修改集合的大小*/for (TaskInfo taskInfo : killLists) {//判断是否是用户appif (taskInfo.isUserApp()) {userTaskInfos.remove(taskInfo);//
                activityManager.killBackgroundProcesses(taskInfo.getPackageName());} else {systemAppInfos.remove(taskInfo);//
                activityManager.killBackgroundProcesses(taskInfo.getPackageName());}}UIUtils.showToast(TaskManagerActivity.this,"共清理"+ totalCount+ "个进程,释放"+ Formatter.formatFileSize(TaskManagerActivity.this,killMem) + "内存");//processCount //totalCountprocessCount -= totalCount; tv_task_process_count.setText("运行中的进程:"+ processCount +"个");// tv_task_memory.setText("剩余/总内存:"+ Formatter.formatFileSize(TaskManagerActivity.this, availMem + killMem)+ "/"+ Formatter.formatFileSize(TaskManagerActivity.this, totalMem));// 刷新界面
        adapter.notifyDataSetChanged();}/***设置* @param view*/public void openSetting(View view){startActivity(new Intent(TaskManagerActivity.this,TaskManagerSettingActivity.class));}
}

TaskInfoParser.java
public class TaskInfoParser {public static List<TaskInfo> getTaskInfos(Context context) {PackageManager packageManager = context.getPackageManager();List<TaskInfo> TaskInfos = new ArrayList<TaskInfo>();//ActivityManager activityManager = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);//List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();for (RunningAppProcessInfo runningAppProcessInfo : appProcesses) {TaskInfo taskInfo = new TaskInfo();//String processName = runningAppProcessInfo.processName;taskInfo.setPackageName(processName);try {MemoryInfo[] memoryInfo = activityManager.getProcessMemoryInfo(new int[]{runningAppProcessInfo.pid});int totalPrivateDirty = memoryInfo[0].getTotalPrivateDirty() * 1024;
taskInfo.setMemorySize(totalPrivateDirty);PackageInfo packageInfo = packageManager.getPackageInfo(processName, 0);
Drawable icon = packageInfo.applicationInfo.loadIcon(packageManager);taskInfo.setIcon(icon);String appName = packageInfo.applicationInfo.loadLabel(packageManager).toString();taskInfo.setAppName(appName);System.out.println("-------------------");System.out.println("processName="+processName);System.out.println("appName="+appName);////packageInfo.applicationInfo.flags //ApplicationInfo.FLAG_SYSTEMint flags = packageInfo.applicationInfo.flags;//ApplicationInfo.FLAG_SYSTEM if((flags & ApplicationInfo.FLAG_SYSTEM) != 0 ){//taskInfo.setUserApp(false);}else{
//taskInfo.setUserApp(true);}} catch (Exception e) {// TODO Auto-generated catch block
                e.printStackTrace();//
taskInfo.setAppName(processName);taskInfo.setIcon(context.getResources().getDrawable(R.drawable.ic_launcher));}TaskInfos.add(taskInfo);}return TaskInfos;}}

UIUtils.java
public class UIUtils {public static void showToast(final Activity context,final String msg){if("main".equals(Thread.currentThread().getName())){Toast.makeText(context, msg, 1).show();}else{context.runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(context, msg, 1).show();}});}}
}

SystemInfoUtils.java 
public class SystemInfoUtils {public static boolean isServiceRunning(Context context, String className) {

 /** *都是管理器           * * ActivityManager 活动(任务/进程)管理器           * * packageManager 包管理器                       */ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);         //获取到手机上所有运行的进程List<RunningServiceInfo> infos = am.getRunningServices(200);for (RunningServiceInfo info : infos) {String serviceClassName = info.service.getClassName();if (className.equals(serviceClassName)) {return true;}}return false;}public static int getProcessCount(Context context) {//得到进程的个数        ActivityManager activityManager = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);        List<RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();return runningAppProcesses.size();}public static long getAvailMem(Context context) {//剩余内存
        ActivityManager activityManager = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
//得到内存的基本信息
        activityManager.getMemoryInfo(memoryInfo);return memoryInfo.availMem;}public static long getTotalMem(Context context) {//总内存try {// /proc/meminfo FileInputStream fis = new FileInputStream(new File("/proc/meminfo"));BufferedReader reader = new BufferedReader(new InputStreamReader(fis));String readLine = reader.readLine();StringBuffer sb = new StringBuffer();for (char c : readLine.toCharArray()) {if (c >= '0' && c <= '9') {sb.append(c);}}return Long.parseLong(sb.toString()) * 1024;} catch (Exception e) {// TODO Auto-generated catch block
            e.printStackTrace();}return 0;}}

TaskInfo.java  javabean
public class TaskInfo {private Drawable icon;private String packageName;private String appName;private long memorySize;private boolean userApp;private boolean checked;public boolean isChecked() {return checked;}public void setChecked(boolean checked) {this.checked = checked;}public Drawable getIcon() {return icon;}public void setIcon(Drawable icon) {this.icon = icon;}public String getPackageName() {return packageName;}public void setPackageName(String packageName) {this.packageName = packageName;}public String getAppName() {return appName;}public void setAppName(String appName) {this.appName = appName;}public long getMemorySize() {return memorySize;}public void setMemorySize(long memorySize) {this.memorySize = memorySize;}public boolean isUserApp() {return userApp;}public void setUserApp(boolean userApp) {this.userApp = userApp;}@Overridepublic String toString() {return "TaskInfo [packageName=" + packageName + ", appName=" + appName+ ", memorySize=" + memorySize + ", userApp=" + userApp + "]";}
}

SharedPreferencesUtils.java

public class SharedPreferencesUtils {public static final String SP_NAME = "config";public static void saveBoolean(Context context,String key , boolean value){SharedPreferences sp = context.getSharedPreferences(SP_NAME, 0);sp.edit().putBoolean(key, value).commit();}public static boolean getBoolean(Context context,String key,boolean defValue){SharedPreferences sp = context.getSharedPreferences(SP_NAME, 0);return sp.getBoolean(key, defValue);}
}

转载于:https://www.cnblogs.com/mengxiao/p/6379147.html

手机安全卫士——进程管理相关推荐

  1. 手机android进程管理,手机进程管理app_华为手机进程管理_手机自动进程管理软件-多特软件站安卓网...

    手机进程管理软件是一款手机进程管理方法app,根据手机进程管理软件你能便捷的控制自己的手机进程,针对有必须的盆友而言非常好. 功能介绍 简约实用的android每日任务停止专用工具.你是不是感觉运作的 ...

  2. 手机安全卫士——软件管理-用户程序和系统程序

    首先看一下界面: AppManagerActivity .java //软件管理 public class AppManagerActivity extends Activity implements ...

  3. Android开发实战《手机安全卫士》——11.“进程管理”模块拓展 窗体小部件 生成快捷方式

    文章目录 1.进程管理--隐藏系统进程 2.进程管理--锁屏清理 3.拓展功能--生成快捷方式 4.高级工具--常用号码查询(布局实现) 5.高级工具--常用号码查询(逻辑实现) 6.拓展功能--窗体 ...

  4. Android开发实战《手机安全卫士》——10.“进程管理”模块实现 PopupWindow 内存清理

    文章目录 1.软件管理--PopupWindow的使用 2.软件管理--PopupWindow的动画 3.软件管理--卸载应用 & 启动应用 & 分享应用 4.进程管理--布局实现 5 ...

  5. 手机卫士09_应用程序四种查看_ListView小标题_进程管理

    手机卫士09_应用程序四种查看_ListView小标题_进程管理 1.悬浮窗体的功能实现: 1.1.应用程序的卸载: 包安装器 packageInstall,包卸载packageruninstall ...

  6. 安卓手机管理器_一款多功能的手机文件/程序/进程管理器

    ES文件浏览器的大名 想必早有耳闻 ES 文件浏览器是一款多功能的手机文件/程序/进程管理器,可以在手机.电脑.远程和蓝牙间浏览管理文件.是一个功能强大的免费的本地和网络文件管理器和应用程序管理器. ...

  7. 基于Android的手机安全卫士的开发

    基于Android的手机安全卫士的开发 开发环境 处理器:Intel® Core™ i5-5200U CPU 2.20GHz 内存:4GB 硬盘:500GB 操作系统:Windows 7中文版,64位 ...

  8. 基于 Android 平台的手机安全卫士的设计与实现【100010420】

    基于 Android 平台的手机安全卫士的设计与实现 第 1 章 引言 1.1 研究背景及意义 随着智能手机和网络的完美结合,使得智能机的功能越来越强大,浏览网页.网络购物.视频对话都普及到各个手机终 ...

  9. 基于Android平台的手机安全卫士的设计与实现

    目 录 第1章 引言 1 1.1 研究背景及意义 1 1.2 安全软件的现状 1 1.3 本文主要工作 2 1.4 本文的组织结构 2 第2章 Android的相关技术介绍及分析 3 2.1 搭建An ...

最新文章

  1. 服务器光盘修复读不出盘,求助,硬盘读不出来怎么修复?
  2. 【C语言运算符大全】快速学会C语言运算符
  3. SSM三大框架整合Springfox(Swagger2)详细解决方案
  4. 【转】三分钟了解Fiori背后的设计理念
  5. wince怎么刷carplay_Carplay支持仪表/HUD显示 宝马为全球超750000辆车发布OTA升级
  6. MySql-Proxy之多路结果集归并
  7. 拼多多:有营销号“骗粉博出位” 将用法律武器维权
  8. OpenShift 4 - 使用教程和免费试用环境
  9. oracle 11g job创建,Oracle 11g 手动创建库完整实施过程
  10. 主机_云服务器vps价格比对[博]
  11. 我为什么反对 Google 拍卖 Android 搜索引擎选项?
  12. 一个小型的中文文本分类系统(项目链接文末)——《ML算法原理和实践》学习笔记
  13. python excel案例导入jira_用Python脚本批量添加JIRA用户,python,jira
  14. C++黑客项目:U盘病毒免疫器
  15. Linux驱动曝光AMD Vega20核心
  16. Pycharm快速入门(6) — 版本控制
  17. 采样准则(时间采样与采样频率)的选取
  18. 2018主流服务器cpu,【热门服务器CPU排行榜】2021热门服务器CPU排名_热门服务器CPU排行榜10强-太平洋产品报价...
  19. 输入一个字符串求出其中逆序数对
  20. 联想z5 Android 9.0,联想Z5开启Android 9.0内测,新增人脸识别!

热门文章

  1. 向碳基芯片更进一步:台积电、斯坦福等联手开发碳纳米管晶体管新工艺,性能逼近硅元件...
  2. 华为开源自研AI框架MindSpore!自动微分、并行加持,一次训练,可多场景部署...
  3. 隔空操控iPhone!苹果新获悬停手势专利
  4. Linux下执行.sh命令出现-bash: ./bin/start.sh: /bin/bash^M: bad interpreter: No such file or directory...
  5. HTML中DOM对象的属性和方法的层级关系是怎样的?(目录即层次)
  6. Hibernate 中配置属性详解(hibernate.properties)
  7. 【微软公有云系列】Hyper-v(WinSer 2012 R2)网络虚拟化(三)租户隔离
  8. 一门杀人于无形的艺术——社会工程
  9. 2012年度IT博客大赛50强报道:高俊峰
  10. Silverlight中使用控件模板的问题(自己添加控件的方法)