7.2 进程管理器的数据获取

本文档描述了如何在Android应用中实现一个进程管理器,包括获取运行进程数、内存信息,创建JavaBean,使用ListView展示进程信息,并实现全选、取消全选和反选功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 创建taskMemoryUtils, 在工具类中创建am, 通过am获取正在运行的进程的个数、可用内存空间大小、总内存空间大小
2. 创建javaBean
3. 创建javaBen数据访问类, 在TaskInfoprovider类中创建javaBen数据访问方法,  在方法中创建ap,pm   初始化javaBean内的属性值, 并将javaBean装载在集合中, 并返回该集合

4.  在TaskManagerActivity中,  filldate到内存(集合中);   然后通知handler跟新界面(给listView创建适配器)  
  
5.  给listView中的条目设置setOnItemClickListener();在点击事件的方法中如果需要获取item容器中的javaBean;  重写适配器中的getItem()方法, 初始化条目中的javaBean, 返回javaBean让 setOnItemClickListener();接收

6.在全选,取消全选, 反选的方法中,  改变了集合中javaBean的的属性值, 则集合中数据要和listView中的数据同步;  刷新界面    adapter.notifyDataSetChanged();   //刷新界面
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
public   class   TaskManagerActivity   extends   Activity {
 
       private   TextView    tv_process_count ;
       private   TextView    tv_mem_info ;
       private   ListView   lv_task_manage ;
       private   LinearLayout     task_loading ;
      
       private   long   availMem ;
       private   long   totalMem ;
      
       private   TaskInfoBean    taskInfoBean ;
       private   List<TaskInfoBean>    allTaskInfos ;
       private   List<TaskInfoBean>    userTaskInfos ;
       private   List<TaskInfoBean>    sysTaskInfos ;
      
       private   MyAdapter    adapter ;
      
      
       /**
       * 创建消息机制
       */
       private   Handler    handler =   new   Handl er(){
               @Override
               public   void   handleMessage(Message msg) {
                     super .handleMessage(msg);
                     task_loading .setVisibility(View.   GONE );      //加载界面不可见
                     adapter =   new   MyAdapter();
                     lv_task_manage .setAdapter(   adapter );
                  
            }
            
      };
      
      
       @Override
       protected   void   onCreate(Bundle savedInstanceState) {
           super .onCreate(savedInstanceState);
         setContentView(R.layout.   activity_task_manage );
        
            //找到关心的控件
           tv_process_count =(TextView) findViewById(R.id. tv_process_count   );
           tv_mem_info =(TextView) findViewById(R.id.   tv_mem_info );
           lv_task_manage =(ListView) findViewById(R.id.   lv_task_manage );
           task_loading =(LinearLayout) findViewById(R.id.   task_loading );
        
           //给关心的控件赋值
           tv_process_count .setText(   "正在运行进程:"   +TaskMemoreryUtis.getRuingProcessCount ( this   )+ "个"   );
       
        
           availMem =TaskMemoreryUtis. getAvailMem( this );
           totalMem =TaskMemoreryUtis. getTotalMem( this );
           tv_mem_info .setText(   "可用/总内存:"   +Formatter.formatFileSize(   this ,   availMem )+   "/" +Formatter. formatFileSize( this ,   totalMem ));
        
           //声明进程集合
           allTaskInfos =   new   ArrayList<TaskInfoBean>();
           userTaskInfos =   new   ArrayList<TaskInfoBean>();
           sysTaskInfos =   new   ArrayList<TaskInfoBean>();
        
        
           //给listview 设置item点击事件
           lv_task_manage .setOnItemClickListener(   new   OnItemClickListener() {

               @Override
               public   void   onItemClick(AdapterView<?> parent, View view,   int   position,   long   id) {
                     //得到条目对应的对象
                  Object obj =   lv_task_manage .getItemAtPosition(position);
                     if (obj!=   null && obj   instanceof   TaskInfoBean){
                           taskInfoBean =(TaskInfoBean) obj;     //得到适配器中getItem()方法返回的item中的对象
                        
                           if (   taskInfoBean .getPackageName().equals(getPackageName())){      //应用是手机卫士时,下面的代码不执行
                                 return ;
                        }
                        
                        
                        CheckBox  cb=(CheckBox) view.findViewById(R.id. cb_status   );
                           if (   taskInfoBean .isChecked()){
                              cb.setChecked(   false );
                                 taskInfoBean .setChecked(   false );
                        }   else {
                              cb.setChecked(   true );
                                 taskInfoBean .setChecked(   true );
                              
                        }
                        
                        
                        
                        
                  }
                  
                  
                  
                  
                  
            }
      
        
        
        
         });
        
        
        
        
        
           //填充数据
         fillDate();
        
        
          
      }

       /**
       * 填充数据
       */
       private   void   fillDate() {
               task_loading .setVisibility(View.   VISIBLE );
            
               new   Thread(){
                     public   void   run() {      //初始化集合中数据
                           allTaskInfos =TaskInfoProvider. getTaskInfos(getApplicationContext());
                        for   (TaskInfoBean allTaskInfo :   allTaskInfos ) {
                                  if (allTaskInfo.isUserTask()){
                                        userTaskInfos .add(allTaskInfo);     //初始化用户 app集合
                                     
                                }   else {
                                        sysTaskInfos .add(allTaskInfo);      //初始化系统 app集合
                                }
                        
                        }
                        
                           handler .sendEmptyMessage(0);      //通知主线程跟新 ui
                        
                  };
                  
                  
            }.start();
            
            
      }
      
      
       /**
       * 创建适配器
       *
       */
       public   class   MyAdapter    extends   BaseAdapter{

               @Override
               public   int   getCount() {
                  
                     return   userTaskInfos .size()+1+   sysTaskInfos .size()+1;
            }
            
               @Override
               public   View getView(   int   position, View convertView, ViewGroup parent) {
               
                     //初始化javaBean
                     if (position==0){
                        TextView   tv_user=   new   TextView(getApplicationContext());
                        tv_user.setText(   "用户应用" );
                        tv_user.setBackgroundColor(Color.   GRAY );
                        tv_user.setTextColor(Color.   WHITE );
                           return   tv_user;
                  }   else   if (position==   userTaskInfos .size()+1){
                        TextView   tv_sys=   new   TextView(getApplicationContext());
                        tv_sys.setText(   "系统应用" );
                        tv_sys.setBackgroundColor(Color.   GRAY );
                        tv_sys.setTextColor(Color.   WHITE );
                           return   tv_sys;
                        
                        
                  }   else   if (position<=   userTaskInfos .size()){
                           taskInfoBean =   userTaskInfos .get(position-1);
                  
                  }   else {
                           taskInfoBean =   sysTaskInfos .get(position-1-   userTaskInfos .size()-1);
                  }
                  
                  
                  
                     //填充布局
                  View view;
                  ViewHolder holder;
                     if (convertView!=   null &&convertView   instanceof   RelativeLayout){
                        view=convertView;
                        holder=(ViewHolder) view.getTag();
                  }   else {
                        holder=   new   ViewHolder();
                        view=View. inflate(getApplicationContext(),R.layout. list_task_item ,   null );
                        
                        holder.   iv_taskicon =(ImageView) view.findViewById(R.id. iv_taskicon   );
                        holder.   tv_taskname =(TextView)view.findViewById(R.id.   tv_taskname );
                        holder.   tv_meminfo =(TextView)view.findViewById(R.id.   tv_meminfo );
                        holder.   cb_status =(CheckBox)view.findViewById(R.id.   cb_status );
                        
                        view.setTag(holder);
                }
                  
                     //给item中的对象赋值
                  holder.   iv_taskicon .setImageDrawable(   taskInfoBean .getIcon());
                  holder.   tv_taskname .setText(   taskInfoBean .getName());
                  holder.   tv_meminfo .setText(   "内训占用" +Formatter.formatFileSize(getApplicationContext(),   taskInfoBean .getMemorySize()));
                  

                  if   (   taskInfoBean .isChecked()) {
                        holder.   cb_status .setChecked(   true );
                  }   else   {
                        holder.   cb_status .setChecked(   false );
                  }
                  
                  
                     // 不显示自己 手机卫士的 checkbox
                     if   ( taskInfoBean .getPackageName().equals(getPackageName())) {
                        holder.   cb_status .setVisibility(View.   INVISIBLE );
                  }   else   {
                        holder.   cb_status .setVisibility(View.   VISIBLE );
                  }

                  
                  
                  
                     return   view;
            }

            
               /**
             * 返回Item对象给, item的点击事件
             */
               @Override
               public   Object getItem(   int   position) {
                     //初始化javaBean返回给item的点击事件
                     if (position==0){
                        return   null ;
                  }   else   if (position==   userTaskInfos .size()+1){
                           return   null ;
                  }   else   if (position<=   userTaskInfos .size()){
                           taskInfoBean =   userTaskInfos .get(position-1);
                  
                  }   else {
                           taskInfoBean =   sysTaskInfos .get(position-1-   userTaskInfos .size()-1);
                  }
                  
                  
                  
                  
                     return   taskInfoBean ;
            }

               @Override
               public   long   getItemId(   int   position) {
                  
                     return   0;
            }

      }
      
       /**
       *
       * 创建item内控件id的引用
       *
       */
       static   class   ViewHolder {
            ImageView   iv_taskicon ;
            TextView   tv_taskname ;
            TextView   tv_meminfo ;
            CheckBox   cb_status ;
      }
      
      
       /**
       * 全选的方法
       *   @param   view
       */
       public   void   selectAll(View view){
      
           for (TaskInfoBean userTaskInfo :   userTaskInfos ) {
            
                 if (userTaskInfo.getPackageName().equals(getPackageName())){
                       continue ;      //结束本次循环
               }
               userTaskInfo.setChecked(   true );
         }
        
         for (TaskInfoBean sysTaskInfo :   sysTaskInfos ) {
         sysTaskInfo.setChecked(   true );
              
         }
      
          adapter .notifyDataSetChanged();     //刷新界面
      
      }
      
      
      
      
       /**
       * 取消全选的方法
       *   @param   view
       */
       public   void   unSelectAll(View view){
      
           for (TaskInfoBean userTaskInfo :   userTaskInfos ) {
            
                 if (userTaskInfo.getPackageName().equals(getPackageName())){
                       continue ;      //结束本次循环
               }
               userTaskInfo.setChecked(   false );
         }
        
         for (TaskInfoBean sysTaskInfo :   sysTaskInfos ) {
         sysTaskInfo.setChecked(   false );
              
         }
      
         adapter .notifyDataSetChanged();     //刷新界面
      
      }
      
      
      
      
      
       /**
       * 取反的方法
       *   @param   view
       */
       public   void   selectOppistie(View view){
      
           for (TaskInfoBean userTaskInfo :   userTaskInfos ) {
            
                 if (userTaskInfo.getPackageName().equals(getPackageName())){
                       continue ;      //结束本次循环
               }
                 if (userTaskInfo.isChecked()){
                  userTaskInfo.setChecked(   false );
               }   else {
                     userTaskInfo.setChecked(   true );
               }
              
         }
        
         for (TaskInfoBean sysTaskInfo :   sysTaskInfos ) {
       
           if (sysTaskInfo.isChecked()){
               sysTaskInfo.setChecked(   false );
         } else {
               sysTaskInfo.setChecked(   true );
             }
           
             }
      
         adapter .notifyDataSetChanged();     //刷新界面
      
        }
      
      

      
}





























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值