Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> android 查看手機運行的進程列表,android進程

android 查看手機運行的進程列表,android進程

編輯:關於android開發

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: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);
        }
    }
}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved