android 查看手机运行的进程列表

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <!-- 定义获取可用内存的按钮 -->
    <Button
        android:id="@+id/btn_main_ablememory"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="可用 的内存"/>
    <!-- 定义查看正在运行的进程的按钮 -->
    <Button
        android:id="@+id/btn_main_lookruningmemory"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="查看正在运行的进程"/>
    <!-- 定义显示当前进程数的标签控件 -->
    <TextView
        android:id="@+id/tv_main_currentprocessnum"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <!-- 定义进程列表控件 -->
    <ListView
        android:id="@+id/lv_main_list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    <!-- 定义获取内容显示的标签控件 -->
    <TextView
        android:id="@+id/tv_main_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

browse_process_item.xml

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

    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:layout_marginLeft="10dip"
        android:orientation="horizontal">
        <TextView android:layout_width="100dip"
            android:layout_height="wrap_content" android:text="进程ID : "></TextView>
        <TextView android:id="@+id/tvProcessPID"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_marginLeft="3dip" android:textColor="#FFD700"></TextView>
    </LinearLayout>

    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:layout_marginLeft="10dip"
        android:orientation="horizontal">
        <TextView android:layout_width="100dip"
            android:layout_height="wrap_content" android:text="进程所在UID:"></TextView>
        <TextView android:id="@+id/tvProcessUID"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:textColor="#FFD700"></TextView>
    </LinearLayout>

    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:layout_marginLeft="10dip"
        android:orientation="horizontal">
        <TextView android:layout_width="100dip"
            android:layout_height="wrap_content" android:text="进程占用内存:"></TextView>
        <TextView android:id="@+id/tvProcessMemSize"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:textColor="#FFD700"></TextView>
    </LinearLayout>

    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:layout_marginLeft="10dip"
        android:orientation="horizontal">
        <TextView android:layout_width="100dip"
            android:layout_height="wrap_content" android:text="进程名:"></TextView>
        <TextView android:id="@+id/tvProcessName"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:textColor="#FFD700"></TextView>
    </LinearLayout>
</LinearLayout>
package com.example.yanlei.yl2;

import android.app.ActivityManager;
import android.app.ActivityManager.MemoryInfo;
import android.content.Context;
import android.os.Bundle;
import android.os.Debug;
import android.support.v7.app.AppCompatActivity;
import android.text.format.Formatter;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    // 得到可用内存的按钮对象
    private Button btnEnableMember;
    // 查看运行的程序
    private Button btnLookRuningMemory;
    // 得到activity的管理对象
    private ActivityManager mActivityManager;
    // 显示可用内存的标签
    private TextView tvText;
    // 显示进程的列表对象
    private ListView listviewProcess;
    // 进程数组对象
    private ArrayList<ProcessInfo> processInfoList;
    // 显示进程总数的对象
    private TextView tvCurrentProcessNum;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 得到布局中的控件
        findView();
        // 给控件设置监听器
        setListener();
        // 得到ActivityManager服务
        mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    }

    private void setListener() {
        // TODO Auto-generated method stub
        btnEnableMember.setOnClickListener(listener);
        btnLookRuningMemory.setOnClickListener(listener);
    }

    private void findView() {
        // 得到布局中的控件对象
        btnEnableMember = (Button) findViewById(R.id.btn_main_ablememory);
        btnLookRuningMemory = (Button) findViewById(R.id.btn_main_lookruningmemory);
        tvText = (TextView) findViewById(R.id.tv_main_text);
        listviewProcess = (ListView) findViewById(R.id.lv_main_list);
        tvCurrentProcessNum = (TextView) findViewById(R.id.tv_main_currentprocessnum);
    }

    OnClickListener listener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch (v.getId()) {
                case R.id.btn_main_ablememory:
                    // 得到系统可用的内存
                    String availMemStr = getSystemAvaialbeMemorySize();
                    // 设置textview的内容
                    tvText.setText(availMemStr);
                    // 设置textview可见
                    tvText.setVisibility(View.VISIBLE);
                    // 设置listview不可见
                    listviewProcess.setVisibility(View.GONE);
                    break;
                case R.id.btn_main_lookruningmemory:
                    // 设置textview不可见
                    tvText.setVisibility(View.GONE);
                    // 设置listview可见
                    listviewProcess.setVisibility(View.VISIBLE);
                    // 获得系统进程信息
                    getRunningAppProcessInfo();
                    // 向适配器中放置数据源
                    setAdapter();
                    break;
                default:
                    break;
            }

        }
    };

    protected String getSystemAvaialbeMemorySize() {
        // TODO Auto-generated method stub
        // 获得MemoryInfo对象
        MemoryInfo memoryInfo = new MemoryInfo();

        // 获得系统可用内存,保存在MemoryInfo对象上
        mActivityManager.getMemoryInfo(memoryInfo);
        long memSize = memoryInfo.availMem;

        // 字符类型转换
        String availMemStr = formateFileSize(memSize);
        return availMemStr;

    }

    // 字符类型转换
    private String formateFileSize(long size) {

        return Formatter.formatFileSize(MainActivity.this, size);
    }

    // 向适配器中放置数据源
    protected void setAdapter() {
        // TODO Auto-generated method stub
        ProcessInfoAdapter mprocessInfoAdapter = new ProcessInfoAdapter(this,
                processInfoList);
        listviewProcess.setAdapter(mprocessInfoAdapter);
    }

    // 获得系统进程信息
    private void getRunningAppProcessInfo() {
        // ProcessInfo Model类 用来保存所有进程信息
        processInfoList = new ArrayList<ProcessInfo>();

        // 通过调用ActivityManager的getRunningAppProcesses()方法获得系统里所有正在运行的进程
        List<ActivityManager.RunningAppProcessInfo> appProcessList = mActivityManager
                .getRunningAppProcesses();

        for (ActivityManager.RunningAppProcessInfo appProcessInfo : appProcessList) {
            // 进程ID号
            int pid = appProcessInfo.pid;
            // 用户ID 类似于Linux的权限不同,ID也就不同 比如 root等
            int uid = appProcessInfo.uid;
            // 进程名,默认是包名或者由属性android:process=""指定
            String processName = appProcessInfo.processName;
            // 获得该进程占用的内存
            int[] myMempid = new int[] { pid };
            // 此MemoryInfo位于android.os.Debug.MemoryInfo包中,用来统计进程的内存信息
            Debug.MemoryInfo[] memoryInfo = mActivityManager
                    .getProcessMemoryInfo(myMempid);
            // 获取进程占内存用信息 kb单位
            int memSize = memoryInfo[0].dalvikPrivateDirty;
            // 构造一个ProcessInfo对象
            ProcessInfo processInfo = new ProcessInfo();
            // 设置processinfo信息
            processInfo.setPid(pid);
            processInfo.setUid(uid);
            processInfo.setMemSize(memSize);
            processInfo.setProcessName(processName);
            // 添加到processInfoList中
            processInfoList.add(processInfo);
        }
        // 得到进程个数
        tvCurrentProcessNum.setText("当前系统进程共有:" + processInfoList.size());
    }
}
ProcessInfo.java
package com.example.yanlei.yl2;

//定义ProcessInfo类,代表一个进程的信息
public class ProcessInfo {
    private int pid; // 进程id  Android规定android.system.uid=1000
    private int uid; // 进程所在的用户id ,即该进程是有谁启动的 root/普通用户等
    private int memSize; // 进程占用的内存大小,单位为kb
    private String processName; // 进程名

    public ProcessInfo(){}

    public int getPid() {
        return pid;
    }

    public void setPid(int pid) {
        this.pid = pid;
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public int getMemSize() {
        return memSize;
    }

    public void setMemSize(int memSize) {
        this.memSize = memSize;
    }

    public String getProcessName() {
        return processName;
    }

    public void setProcessName(String processName) {
        this.processName = processName;
    }
}
ProcessInfoAdapter.java
package com.example.yanlei.yl2;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

//自定义适配器类,提供给listView的自定义view
public class ProcessInfoAdapter extends BaseAdapter {
    // 需要显示的对象列表
    private List<ProcessInfo> mlistProcessInfo = null;

    LayoutInflater infater = null;

    public ProcessInfoAdapter(Context context, List<ProcessInfo> apps) {
        // 初始化infater对象
        infater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        // 初始化需要显示的mlistProcessInfo对象
        mlistProcessInfo = apps;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        System.out.println("size" + mlistProcessInfo.size());
        return mlistProcessInfo.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return mlistProcessInfo.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertview, ViewGroup arg2) {
        View view = null;
        ViewHolder holder = null;
        if (convertview == null || convertview.getTag() == null) {
            // 通过XML得到VIEW
            view = infater.inflate(R.layout.browse_process_item, null);
            holder = new ViewHolder(view);
            // 把查找的view缓存起来
            view.setTag(holder);
        } else {
            view = convertview;
            // 取出缓存的VIEW
            holder = (ViewHolder) convertview.getTag();
        }
        // 得到ProcessInfo信息,并在item的每个位置显示相关信息
        ProcessInfo processInfo = (ProcessInfo) getItem(position);
        holder.tvPID.setText(processInfo.getPid() + "");
        holder.tvUID.setText(processInfo.getUid() + "");
        holder.tvProcessMemSize.setText(processInfo.getMemSize() + "KB");
        holder.tvProcessName.setText(processInfo.getProcessName());
        // 返回需要显示的view
        return view;
    }

    // 占位符
    class ViewHolder {
        TextView tvPID; // 进程ID
        TextView tvUID; // 用户ID
        TextView tvProcessMemSize; // 进程占用内存大小
        TextView tvProcessName; // 进程名

        public ViewHolder(View view) {
            this.tvPID = (TextView) view.findViewById(R.id.tvProcessPID);
            this.tvUID = (TextView) view.findViewById(R.id.tvProcessUID);
            this.tvProcessMemSize = (TextView) view
                    .findViewById(R.id.tvProcessMemSize);
            this.tvProcessName = (TextView) view
                    .findViewById(R.id.tvProcessName);
        }
    }
}
时间: 2024-10-13 17:48:13

android 查看手机运行的进程列表的相关文章

Android -- 查看手机中所有进程

布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientat

Android - 显示手机运行的Activity

显示手机运行的Activity 本文地址:http://blog.csdn.net/caroline_wendy 手机中,需要调试程序的界面,可以快速进行定位,使用Android开发工具ADB(Android Debug Bridge). 针对于Mac系统 1. ADB的位置: $ cd /Applications/Android\ Studio.app/sdk/platform-tools/ 2. shell命令的位置: $ echo $PATH 3. 把程序在目录中建立连接: $ sudo

ssh 关闭后仍保持当前运行的进程

ssh 关闭后仍保持当前运行的进程 由于各种原因,需要通过ssh登录linux或者unix主机,很多时候我们需要通过ssh的终端启动一 些服务或者运行一些程序,但是默认情况下,当我们关闭ssh终端连接,随之启动的程序也会关闭.原因是:SSH会话关闭时,ssh所关联的pty关闭,系 统会给这个pty所关联的session中的所有进程发送SIGHUP信号,SIGHUP的默认信号处理程序是终止进程,除非进程自己处理了 SIGHUP. 解决方法如下: 使用现成的命令nohup,可以让指定的程序在pty关

android 查看当前正在运行的进程

转载至 https://github.com/wenmingvs/AndroidProcess 因为Android5.0以上的权限封锁,无法直接获取正在运行的进程,此文总共介绍6中方法获取, 详细介绍与用法可查看原文

【转】android IDE——通过DDMS查看app运行时所占内存情况

在Android内存优化方面,我们不可能做到没有大内存的占用情况. 所以有时候要清楚我们的app到底占用了多少内存,哪一步操作占用了多少的内存. 这时候,android的ddms中提供了一个工具,是可是实时查看app运行时的内存使用情况. 下面我以android studio为例.其实eclipse adt 是一样的. eclipse中也是这个图标. 如何使用,图中已经表明的很清楚了. 1,找到当前运行的手机 2,点击和你app相同包名的进程 3,点击update Heap 4,切换到Heap视

shell学习五十一天----top命令查看进程列表

top命令查看进程列表 top命令是linux下常用的性能分析工具,能实时显示系统中各个进程的资源占用状况.和win的资源管理器类似.top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态,如果在前台执行该命令,它将独占前台,知道用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最"敏感"的任务列表.该命令可以按CPU使用,内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互命令或者在个人定制文件中进行设定. t

Ubuntu系统下在Eclipse中使用真实手机运行调试Android应用

本文是在Ubuntu下已搭建好JRE+Eclipse+AndroidSDK的环境中进行的. 如果从未进行过如下的操作的话,在运行Android应用时,在设备选择器那里你的手机会显示为一大串"?"组成的设备并且不可用. 这个事情Android官方文档是有讲到的,点我去看官方文档. 手机端的操作就是打开USB调试选项,然后用USB数据线连接至电脑. 电脑端,首先打开终端,然后输入以下内容并回车: sudo gedit /etc/udev/rules.d/51-android.rules 然

在windows下查看某个运行程序(或进程)的命令行参数

在windows下查看某个运行程序(或进程)的命令行参数使用下面的命令:wmic process get caption,commandline /value如果想查询某一个进程的命令行参数,使用下列方式:wmic process where caption="svchost.exe" get caption,commandline /value这样就可以得到进程的可执行文件位置等信息.

在Linux中查看所有正在运行的进程

可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息. ps命令能提供一份当前进程的快照.如果想状态可以自动刷新,可以使用top命令. ps命令 输入下面的ps命令,显示所有运行中的进程: 1 # ps aux | less 其中, -A:显示所有进程 a:显示终端中包括其它用户的所有进程 x:显示无控制终端的进程 任务:查看系统中的每个进程. 1 2 # ps -A # ps -e 任务:查看非root运行的进程