###1.设备进程信息获取
获取设备运行进程

ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> runningAppProcessInfos = am.getRunningAppProcesses();

获取设备RAM

MemoryInfo outInfo = new ActivityManager.MemoryInfo();
am.getMemoryInfo(outInfo);
outInfo.availMem;//设备可用RAM
outInfo.totalMem;//设备总RAM

###2.获取进程占用RAM
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo[] processMemoryInfo = am.getProcessMemoryInfo(new int[]{info.pid});
long memSize = processMemoryInfo[0].getTotalPrivateDirty()*1024;

###3.ListView中Item中有CheckBox、Button等的焦点处理
ListView的item布局中有CheckBox、Button等会获取焦点的控件会抢走焦点,造成ListView的item点击事件相应不了

解决方法:控件设置

android:clickable="false"
android:focusable="false"

或者

android:focusable="false"
//descendant 后裔; 后代; (由过去类似物发展来的) 派生物; 弟子;
android:descendantFocusability="blocksDescendants"

###10.ListView中getItemAtPosition()的使用
ListView的getItemAtPosition()方法的返回值即为adapter中getItem()方法返回的对象

###4.清理进程
1.添加权限
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
2.具体实现
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.killBackgroundProcesses(String pkgName);

 package com.hb.mobilesafe.activities;

 import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.MemoryInfo;
import android.graphics.Color;
import android.os.Bundle;
import android.text.format.Formatter;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView; import com.hb.demo_mobilesafe.R;
import com.hb.mobilesafe.bean.ProInfo;
import com.hb.mobilesafe.utils.ProgressInfoUtil; public class ProcessManagerActivity extends Activity implements OnClickListener {
private TextView tv_clean,tv_allselect,tv_inverse;
private ListView lv_progress_show;
private TextView tv_progres_ssoft,tv_storage;
private TextView tv_software_count;
private List<ProInfo> infosRun;
private List<ProInfo> userInfo;
private List<ProInfo> sysInfo;
private MyProAdapter adapter;
private ActivityManager am;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_processmanager);
initView();
initDate();
} private void initView() {
tv_clean=(TextView) findViewById(R.id.tv_clean);
tv_allselect=(TextView) findViewById(R.id.tv_allselect);
tv_inverse=(TextView) findViewById(R.id.tv_inverse); tv_progres_ssoft=(TextView) findViewById(R.id.tv_progres_ssoft);
tv_storage=(TextView) findViewById(R.id.tv_storage);
tv_software_count=(TextView) findViewById(R.id.tv_software_count); lv_progress_show=(ListView) findViewById(R.id.lv_progress_show); tv_clean.setOnClickListener(this);
tv_allselect.setOnClickListener(this);
tv_inverse.setOnClickListener(this);
}
private void initDate() { tv_progres_ssoft.setText("运行中的进程:"+getRunpro()+"个");
tv_storage.setText("可用内存/总内存:"+Formatter.formatFileSize(this, getAvimen())
+"/"+Formatter.formatFileSize(this, getTotalMen()));
adapter = new MyProAdapter();
sysInfo = new ArrayList<ProInfo>();
userInfo = new ArrayList<ProInfo>();
new Thread(){
public void run() {
infosRun = ProgressInfoUtil.getInfosRun(ProcessManagerActivity.this);
isSysUserApp();
runOnUiThread(new Runnable() {
public void run() {
lv_progress_show.setAdapter(adapter);
}
});
};
}.start();
lv_progress_show.setOnScrollListener(new OnScrollListener() { @Override
public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(userInfo!=null && sysInfo !=null){ if(firstVisibleItem==0){
tv_software_count.setVisibility(View.GONE);
}else{ tv_software_count.setVisibility(View.VISIBLE);
}
if(firstVisibleItem <userInfo.size()){
tv_software_count.setText("用户进程:"+userInfo.size());
}else{
tv_software_count.setText("系统进程:"+sysInfo.size());
}
}
}
});
lv_progress_show.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if(position == 0 || position == userInfo.size()+1){
return;
}else if(position < userInfo.size()+1){ int newPosition=position -1;
boolean isCheck = userInfo.get(newPosition).isCheck();
if(isCheck){ userInfo.get(newPosition).setCheck(false);
}else{ userInfo.get(newPosition).setCheck(true);
}
}else{
int newPosition=position-userInfo.size()-2;
boolean isCheck = sysInfo.get(newPosition).isCheck();
if(isCheck){
sysInfo.get(newPosition).setCheck(false);
}else{ sysInfo.get(newPosition).setCheck(true);
}
}
adapter.notifyDataSetChanged();
}
});
} /**
* 一键清理,全选,反选
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_clean:
am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
Iterator<ProInfo> userIterator = userInfo.iterator();
Iterator<ProInfo> sysIterator = sysInfo.iterator();
while (userIterator.hasNext()) {
ProInfo next = userIterator.next();
if(next.isCheck()){
am.killBackgroundProcesses(next.getAppPackageName());
userIterator.remove();
}
}
while (sysIterator.hasNext()) {
ProInfo next = sysIterator.next();
if(next.isCheck()){
am.killBackgroundProcesses(next.getAppPackageName());
sysIterator.remove();
}
}
adapter.notifyDataSetChanged(); break; case R.id.tv_allselect:
for (ProInfo infos : infosRun) {
if(!"com.hb.demo_mobilesafe".equals(infos.getAppPackageName())){
infos.setCheck(true);
}
}
adapter.notifyDataSetChanged();
break; case R.id.tv_inverse: for (ProInfo infos : infosRun) {
if(infos.isCheck() && !("com.hb.demo_mobilesafe").equals(infos.getAppPackageName())){
infos.setCheck(false);
}else if(!infos.isCheck() && !("com.hb.demo_mobilesafe").equals(infos.getAppPackageName())){
infos.setCheck(true);
} }
adapter.notifyDataSetChanged();
break;
}
}
/**
* 运行中的进程
* @return
*/
private int getRunpro(){
ActivityManager am=(ActivityManager) getSystemService(ACTIVITY_SERVICE);
int size = am.getRunningAppProcesses().size();
return size; }
/**
* 可用内存
*/
private long getAvimen(){
ActivityManager am=(ActivityManager) getSystemService(ACTIVITY_SERVICE);
MemoryInfo outInfo = new MemoryInfo();
am.getMemoryInfo(outInfo);
return outInfo.availMem; }
/**
* 总内存
*/
private long getTotalMen(){
ActivityManager am=(ActivityManager) getSystemService(ACTIVITY_SERVICE);
MemoryInfo outInfo = new MemoryInfo();
am.getMemoryInfo(outInfo);
return outInfo.totalMem; }
/**
* 区分系统应用和用户应用
*/
public void isSysUserApp(){ for (ProInfo proInfo: infosRun) {
boolean sys = proInfo.isSys();
if(sys){
sysInfo.add(proInfo);
}else{
userInfo.add(proInfo); }
}
}
class MyProAdapter extends BaseAdapter{
@SuppressWarnings("null")
@SuppressLint("ViewHolder") @Override
public View getView(int position, View view, ViewGroup parent) {
ViewHolder holder = null;
if(view != null && view instanceof RelativeLayout){
holder=(ViewHolder) view.getTag();
}else{
holder=new ViewHolder();
view = View.inflate(ProcessManagerActivity.this, R.layout.proinfo_item, null);
holder.iv_appIcon=(ImageView) view.findViewById(R.id.iv_pro_icon);
holder.tv_appName=(TextView) view.findViewById(R.id.tv_pro_name);
holder.tv_proSize=(TextView) view.findViewById(R.id.tv_pro_size);
holder.cb_isCheck=(CheckBox) view.findViewById(R.id.cb_ischeak);
view.setTag(holder);
}
if(position == 0){
TextView tv0= new TextView(ProcessManagerActivity.this);
if(userInfo.size()==0){
tv0.setHeight(0);
return tv0;
}
tv0.setClickable(false);
tv0.setTextColor(Color.WHITE);
tv0.setBackgroundColor(Color.GRAY);
tv0.setText("用户进程:"+userInfo.size());
return tv0;
}else if(position ==userInfo.size()+1){
TextView tv1= new TextView(ProcessManagerActivity.this);
tv1.setClickable(false);
tv1.setTextColor(Color.WHITE);
tv1.setBackgroundColor(Color.GRAY);
tv1.setText("系统进程:"+sysInfo.size());
return tv1;
}else if(position <userInfo.size()+1){
int newPosition = position-1;
ProInfo proInfo = userInfo.get(newPosition);
holder.iv_appIcon.setImageDrawable(proInfo.getAppIcon());
holder.tv_appName.setText(proInfo.getAppName());
holder.tv_proSize.setText("进程大小:"+Formatter.formatFileSize(ProcessManagerActivity.this, proInfo.getProSize()));
holder.cb_isCheck.setChecked(proInfo.isCheck());
String appPackageName = proInfo.getAppPackageName();
if(appPackageName.equals(getPackageName())){
holder.cb_isCheck.setVisibility(View.GONE);
}else {
holder.cb_isCheck.setVisibility(View.VISIBLE);
} }else{
int newPosition = position-userInfo.size()-2;
ProInfo proInfo = sysInfo.get(newPosition);
holder.iv_appIcon.setImageDrawable(proInfo.getAppIcon());
holder.tv_appName.setText(proInfo.getAppName());
holder.tv_proSize.setText("进程大小:"+Formatter.formatFileSize(ProcessManagerActivity.this, proInfo.getProSize()));
holder.cb_isCheck.setChecked(proInfo.isCheck());
}
return view;
}
@Override
public int getCount() {
return userInfo.size()+1+sysInfo.size()+1;
} @Override
public Object getItem(int position) {
return null;
} @Override
public long getItemId(int position) {
return 0;
}
}
class ViewHolder{
ImageView iv_appIcon;
CheckBox cb_isCheck;
TextView tv_appName;
TextView tv_proSize;
}
}

xml:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal" > <TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="46dp"
android:background="#A1FF80"
android:gravity="center_vertical"
android:text="进程管理"
android:textSize="20sp" /> <RelativeLayout
android:id="@+id/rl_size"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv_title" > <TextView
android:id="@+id/tv_progres_ssoft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="运行中的进程:19个"
android:textSize="10sp" /> <TextView
android:id="@+id/tv_storage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="可用内存/总内存:20MB/60MB"
android:textSize="10sp" />
</RelativeLayout> <TextView
android:id="@+id/tv_software_count"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/rl_size"
android:background="#888888"
android:visibility="gone"
android:text="用户进程:5"
android:textColor="#ffffff"
/> <ListView
android:clickable="true"
android:id="@+id/lv_progress_show"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/ll"
android:layout_below="@id/tv_software_count" /> <LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal"
android:padding="2dip" > <TextView
android:id="@+id/tv_clean"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:background="@drawable/clean_button_selector"
android:textSize="15sp" /> <TextView
android:id="@+id/tv_allselect"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/select_btn_selector"
android:textSize="15sp" /> <TextView
android:id="@+id/tv_inverse"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/inverse_btn_selector"
android:textSize="15sp" />
</LinearLayout> </RelativeLayout>

Android项目实战_手机安全卫士进程管理的更多相关文章

  1. Android项目实战_手机安全卫士home界面

    # 安全卫士主页面# ###1.GridView控件 1.与ListView的使用方式差不多,也要使用数据适配器,通过设置android:numColumns控制显示几列 2.通过指定android: ...

  2. Android项目实战_手机安全卫士手机防盗界面

    #安全卫士手机防盗# ###1.Activity的任务栈 1.类似一个木桶,每层只能放一个木块,我们放入木块和取出木块的时候只能从最上面开始操作 ###2.Android中的坐标系![](http:/ ...

  3. Android项目实战_手机安全卫士splash界面

    - 根据代码的类型组织包结构 1. 界面 com.hb.mobilesafe.activities 2. 服务 com.hb.mobilesafe.services 3. 业务逻辑 com.hb.mo ...

  4. Android项目实战_手机安全卫士程序锁

    ###1.两个页面切换的实现1. 可以使用Fragment,调用FragmentTransaction的hide和show方法2. 可以使用两个布局,设置visibility的VISIABLE和INV ...

  5. Android项目实战_手机安全卫士系统加速

    ## 1.本地数据库自动更新的工作机制1. 开启一个服务,定时访问服务器2. 进行版本对比,如果最新版本比较高,获取需要更新的内容3. 将新内容插入到本地数据库中 ## 2.如何处理横竖屏切换1. 指 ...

  6. Android项目实战_手机安全卫士软件管家

    ###1.应用程序信息的flags 1. int flags = packageInfo.applicationInfo.flags2. 0000 0000 0000 0000 0000 0000 0 ...

  7. Android项目实战_手机安全卫士拦截骚扰

    ###1.骚扰拦截需求分析1.界面1.1 黑名单列表界面1.2 添加黑名单界面2.功能2.1 黑名单的添加.删除2.2 拦截电话2.3 拦截短信 ###2.黑名单数据库的创建1.分析需要的字段id 主 ...

  8. Android项目实战_手机安全卫士流量统计

    ## 1.抽屉控件SlidingDrawer:一定要配置android:handle(把手)和android:content(内容),并在子View中添加把手和内容的布局```java <Sli ...

  9. Android项目实战--手机卫士开发系列教程

    <ignore_js_op> banner131010.jpg (71.4 KB, 下载次数: 0) 下载附件  保存到相册 2 分钟前 上传   Android项目实战--手机卫士01- ...

随机推荐

  1. 这个贴子的内容值得好好学习--实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化

    感觉要DJANGO用得好,ORM必须要学好,不管理是内置的,还是第三方的ORM. 最最后还是要到SQL.....:( 这一关,慢慢练啦.. 实例详解Django的 select_related 和 p ...

  2. 洛谷—— P2504 [HAOI2006]聪明的猴子

    P2504 [HAOI2006]聪明的猴子 题目描述 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水面上. ...

  3. Linux服务管理(Ubuntu服务管理工具sysv-rc-conf)(转)

    Linux运行级别 Linux系统任何时候都运行在一个指定的运行级上,并且不同的运行级的程序和服务都不同,所要完成的工作和要达到的目的都不同,系统可以在这些运行级之间进行切换,以完成不同的工作. 运行 ...

  4. js的jsonp

    window.ajaxJsonp=function(params) { params = params || {}; params.data = params.data || {}; var json ...

  5. MySQL: 让MySQL支持颜文字emoji

    数据库需要支持utf8mb4,如果已经创建了,那么可以用如下命令转换: alter database xxxx character set utf8mb4 collate utf8mb4_unicod ...

  6. 2014年辛星starphp第一节设置入口文件以及App类

    *********************本节目标**************** 1.首先是我们的框架大致布局,我们即将写成的这个框架.它的入口文件统一为star.php.它须要做的一些事,比方载入 ...

  7. 《C# 6.0 本质论》 阅读笔记

    <C# 6.0 本质论> 阅读笔记   阅读笔记不是讲述这本书的内容,只是提取了其中一部分我认为比较重要或者还没有掌握的知识,所以如果有错误或者模糊之处,请指正,谢谢! 对于C# 6.0才 ...

  8. JavaSE入门学习10:Java修饰符

    Java语言提供了非常多修饰符,主要分为下面两类: 訪问修饰符 非訪问修饰符 修饰符用来定义类.方法或者变量.通常放在语句的最前端.我们通过以下的样例来说明: <span style=" ...

  9. SOA究竟是个啥

    SOA(Service-Oriented Architecture),中文全称:面向服务的架构. SOA让把系统分离成不同的服务,使用接口来进行数据交互,终于达到整合系统的目的. 专业的词总是让人懵懵 ...

  10. SQLServer添加链接服务器

    右键,添加链接服务器 在安全里面输入用户名和密码 添加成功之后的使用方法 select * from [192.168.1.63,3326].[数据库].[dbo].[表]