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

我的手机管家(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>

    

   

时间: 2024-11-08 13:01:23

我的手机管家(2) 进程管理布局的相关文章

类似腾讯手机管家应用源码完整版

类似腾讯手机管家应用源码,也是自己写的android手机管家,内附源代码,应用实现了手机防功能,通信卫士功能,软件管家,进程管理,手机杀毒等功能,里面的图片部分用到了腾讯手机管家的图片,所以跟腾讯手机管家应用比较类似了,大家可以参考一下,可能有的功能还没有那么完善,不过大家可以再这个基础上进行升级,创新,增加自己的特色吧.或者大家可以看看安装演示版(附件下面) 源码项目下载:http://code.662p.com/view/8982.html <ignore_js_op> <ignor

类似腾讯手机管家应用android源码

类似腾讯手机管家应用源码,也是自己写的android手机管家,内附源代码,应用实现了手机防功能,通信卫士功能,软件管家,进程管理,手机杀毒等功能,里面的图片部分用到了腾讯手机管家的图片,所以跟腾讯手机管家应用比较类似了,大家可以参考一下,可能有的功能还没有那么完善,不过大家可以再这个基础上进行升级,创新,增加自己的特色吧.或者大家可以看看安装演示版(附件下面) <ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore

我的手机管家(4) 进程管理逻辑代码

本节主要介绍进程管理界面的逻辑代码:至此进程管理的功能已经完善了 首先要加载正在运行的进程,获取进程信息, 这是一个耗时的操作, 所以一个子线程来处理缓冲加载, 加载完数据就通知ListView 将数据展示到 界面,listview怎么知道,数据缓冲完了,如何获取这个通知呢? 不错就是使用Thread和Handler结合,在缓冲完成后,使用handler发送一个 空消息 handler.sendEmptyMessage(1); /** * 缓冲加载进程数据 */ private void ini

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

1.悬浮窗体的功能实现: 1.1.应用程序的卸载: 包安装器 packageInstall,包卸载packageruninstall intent.setData(Uri.pare(“package:” + 应用程序包名)) 卸载完之后记得更新list集合,更新适配器. 但是不确定用户是否点了卸载,所以要通过广播获取消息. 并且需要通过代码注册,因为这个广播只在应用管理生效. 要记得addDataSchme(“package”) 接收完广播之后,更新了集合适配器,要记得关闭广播 异常:Concu

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

我的手机管家(5)骚扰拦截   布局界面: 添加黑名单, 拦截信息,和电话 主界面: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_

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

与进程管理的区别是: 进程只是查询内存中的正在运行的应用程序 而应用管理是查询所有Data和Sdk卡中的应用程序 通过PackageManager 来获取已经安装了的应用程序 PackageManager    贯穿了进程管理, 缓存清除, 应用管理 AppInfo 用来存储获取的应用信息, public class AppInfo { private Drawable icon; private String appName; private String packageName; priva

我的手机管家(19) 应用管理 单独介绍一下PopupWindow

我的手机管家(19) 应用管理  单独介绍一下PopupWindow 在前一节中使用点击ListView 出现一个弹出窗口, 用来显示我们的需求. PopupWindow: A popup window that can be used to display an arbitrary view. The popup window is a floating container that appears on top of the current activity. PopupWindow 是一个

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

应用管理的界面与进程管理的界面是一样的, 只是增加一个ListView点击弹出PopupWindow <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android

99手机管家项目的总结

断断续续,终于做完了这个项目(2014-11-24~2015-01-01),感慨万千,真的是白天求生存,晚上求发展. 在手机管家的项目中,实现了手机防盗,通讯卫士,软件管理,进程管理,流量统计,手机杀毒,缓存清理,高级工具,设置中心等功能.使用到的东西: 1.Android四大控件,各大布局. 2.关于ListView的convertView的复用(Listview的优化). 3.ListView的convertView复用带来的数据错乱的问题. 4.AIDL和反射的理解(挂断电话,清理缓存).