我的手机管家 进程管理布局

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的手机管家 进程管理布局相关的知识,希望对你有一定的参考价值。

我的手机管家(2)  进程管理

(1)获取进程信息:所有的进程信息, 正在运行的进程信息, 剩余可用内存

  (2)获取进程信息是一个耗时的操作,

   首先在使用子线程获取进程信息的时候显示缓冲界面,缓冲加载完成后,

   通知LIstView展示数据,加载适配器, 同时缓冲结束

 

获取进程信息的提供者:

package com.ejob.phonesafe.provider;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import android.R;
import android.R.drawable;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.MemoryInfo;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Debug;
import com.ejob.phonesafe.entity.ProcessInfo;
/**
 *进程信息的提供者 
 */
public class ProcessInfoProvider {
    /**
     * 获取正在运行的所有的进程
     */
    public static List<ProcessInfo> getRunningProcess(Context ctx){
        List<ProcessInfo> list= new ArrayList<ProcessInfo>();
        //获取activity引用管理器
        ActivityManager manager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
        //获取正在运行的app应用
        List<RunningAppProcessInfo> runninglist = manager.getRunningAppProcesses();
        //获取包
        PackageManager packageManager = ctx.getPackageManager();
        
        for(RunningAppProcessInfo p : runninglist){
            //获取应用的名,图标,应用进程/系统进程,所占内存,报名
            ProcessInfo info = new ProcessInfo();
            //包名
            String pm = p.processName;
            info.setPackageName(pm);
            //根据进程id(pid)获得内存信息
            Debug.MemoryInfo[] memoryInfos=    manager.getProcessMemoryInfo(new int[]{p.pid});
            //所占内存
            long totalPrivateDirty = memoryInfos[0].getTotalPrivateDirty()*1024;//当前应用所占的内存长度 单位是kb
            info.setMomery(totalPrivateDirty);
            try {
                //根据包名获取app信息
                ApplicationInfo pInfo=packageManager.getApplicationInfo(pm, 0);
                //获取应用图标
                Drawable icon=pInfo.loadIcon(packageManager);
                info.setIcon(icon);
                //应用程序名
                String  appName = pInfo.loadLabel(packageManager).toString();
                info.setName(appName);
                //系统应用/用户应用
                int flags=pInfo.flags;
                if((flags&ApplicationInfo.FLAG_SYSTEM)==ApplicationInfo.FLAG_SYSTEM){
                  info.setUserProcess(false);//系统应用
                }else{
                    info.setUserProcess(true);//用户应用
                }
            } catch (Exception e) {
                e.printStackTrace();
                //某些系统级别的应用获取不了图标,应用名
                info.setIcon(ctx.getResources().getDrawable(R.drawable.progress_horizontal));
                info.setPackageName(pm);
                info.setUserProcess(false);
            }
               list.add(info);        
        }
        return list;
    }
    /**
     * 获取正在运行应用程序的个数
     */
    public static int getRunningProcessNumber(Context ct){
        ActivityManager manager = (ActivityManager) ct.getSystemService(ct.ACTIVITY_SERVICE);
        return manager.getRunningAppProcesses().size();
    }
    /**
     * 获取剩余内存
     */
    public static long getAvailMenory(Context ctx){
        ActivityManager manager = (ActivityManager) ctx.getSystemService(ctx.ACTIVITY_SERVICE);
        MemoryInfo info = new MemoryInfo();//空对象
        manager.getMemoryInfo(info);//该对象在给我们的空对象复制
        return info.availMem;
    }
    /**
     * 获取总内存
     */
    public static long getAllAvailMenory(Context ctx){
        /*ActivityManager manager = (ActivityManager) ctx.getSystemService(ctx.ACTIVITY_SERVICE);
        MemoryInfo info = new MemoryInfo();
        info.totalMem;//获取从内存,但是4.1一下的系统不支持,只能读取proc/meminfo
      */        
        try {
            /**
             * adb devices;
             * adb -s 设备名 shell;
             * ls
             * cd  proc
             * cat meminfo
             * 
             * 
             * cat /proc/meminfo 
             * MemTotal: 3266180 kB 
             * MemFree: 17456 kB 
             * Buffers:111328 kB 
             * Cached: 2664024 kB 
             * SwapCached: 0 kB 
             * Active: 467236 kB
             */
            
            FileReader reader = new FileReader("proc/meminfo");
            BufferedReader br = new BufferedReader(reader);
            String line=br.readLine();
            char []arrChar=line.toCharArray();
            StringBuffer sr = new StringBuffer();
            for(char c:arrChar){
                if(c>=‘0‘&c<=‘9‘){
                    sr.append(c);
                }
            }
            String str = sr.toString();
            long allNum=Long.parseLong(str)*1024;
            return allNum;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }
    /**
     * 杀死后台所有进程
     */
    public static void killAll(Context ctx){
        ActivityManager manager = (ActivityManager) ctx.getSystemService(ctx.ACTIVITY_SERVICE);
        List<RunningAppProcessInfo> list = manager.getRunningAppProcesses();
        for (RunningAppProcessInfo info : list) {
            if(ctx.getPackageName().equals(info.processName)){
                continue;//跳过本应用程序,继续杀掉其他进程
            }else{
                manager.killBackgroundProcesses(info.processName);
            }
            
        }
        
    }
}

进程管理界面:

 一个Fragment布局包含一个缓冲加载布局

         和一个ListView布局

用于缓冲和listview展示切换

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <!-- 进程管理界面 -->

    <TextView
        android:id="@+id/apm_header"
        style="@style/title_style"
        android:text="进程管理" >
    </TextView>

    <RelativeLayout
        android:id="@+id/apm_rl1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="3dp" >

        <TextView
            android:id="@+id/apm_rl1_tv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="运行中的进程:" />

        <TextView
            android:id="@+id/apm_rl1_tv2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="剩余内存/总内存:" />
    </RelativeLayout>

    <FrameLayout
        android:id="@+id/apm_pl1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >

        <ListView
            android:id="@+id/amp_pl1_lv1"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        </ListView>

        <LinearLayout
            android:id="@+id/apm_pl1_ll1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:orientation="vertical" >

            <ProgressBar
                android:id="@+id/apm_pl1_ll1_pb1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="正在加载请稍后..." />
        </LinearLayout>

        <TextView
            android:id="@+id/tv_header"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#ffffff"
            android:padding="5dp"
            android:text="用户进程(0)"
            android:textColor="#bcbcb5"
            android:textSize="18sp" />
    </FrameLayout>

    <LinearLayout
        android:id="@+id/amp_ll1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/amp_ll1_btn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
               android:onClick="selectAll"
            android:background="@drawable/btn_light_green_selector"
            android:text="全选" />

        <Button
            android:id="@+id/amp_ll1_btn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="unSelect"
            android:background="@drawable/btn_light_green_selector"
            android:text="反选" />

        <Button
            android:id="@+id/amp_ll1_btn3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/btn_light_green_selector"
            android:onClick="cleanAllSelect"
            android:text="一键清理" />

        <Button
            android:id="@+id/amp_ll1_btn4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/btn_light_green_selector"
            android:onClick="onSettings"
            android:text="设置" />
    </LinearLayout>

</LinearLayout>

 

    

 

   

 

以上是关于我的手机管家 进程管理布局的主要内容,如果未能解决你的问题,请参考以下文章

我的手机管家 进程管理适配器

我的手机管家(17) 应用管理 获取安装的应用程序

我的手机管家(16) 应用管理 界面设计

我的手机管家(18) 应用管理 主要代码

我的手机管家骚扰拦截 布局界面

我的手机管家(15) 缓存处理 逻辑代码