編輯:關於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); } } }
算法—比較兩種排序算法:選擇排序和插入排序,排序算法現在我們已經實現了兩種排序算法,我們很自然地想知道選擇排序和插入排序哪種更快。這裡我們第一次用實踐說明我們解決這個問題
Android基礎入門教程——10.10 傳感器專題(1)——相關介紹 Android基礎入門教程——10.10 傳感器專題(1)—&
Android開發之Menu:OptionMenu(選項菜單)、ContextMenu(上下文菜單)、SubMenu(子菜單) 菜單的概念,現在已經很普及了。 W
專門搞android,android在android中,線程可以分為MainThread(UI線程)和WorkerThread(除了MainThread之外的線程)。從原
Android Studio教程--給Android Studio安裝G