1、CPU頻率,CPU信息:/proc/cpuinfo和/proc/stat

創(chuàng)新互聯(lián)公司是專業(yè)的烏爾禾網(wǎng)站建設(shè)公司,烏爾禾接單;提供網(wǎng)站制作、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行烏爾禾網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
通過讀取文件/proc/cpuinfo系統(tǒng)CPU的類型等多種信息。
讀取/proc/stat 所有CPU活動(dòng)的信息來計(jì)算CPU使用率
下面我們就來講講如何通過代碼來獲取CPU頻率:
復(fù)制代碼 代碼如下:
package com.orange.cpu;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
public class CpuManager {
// 獲取CPU最大頻率(單位KHZ)
// "/system/bin/cat" 命令行
// "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" 存儲(chǔ)最大頻率的文件的.路徑
public static String getMaxCpuFreq() {
String result = "";
ProcessBuilder cmd;
try {
String[] args = { "/system/bin/cat",
"/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" };
cmd = new ProcessBuilder(args);
Process process = cmd.start();
InputStream in = process.getInputStream();
byte[] re = new byte[24];
while (in.read(re) != -1) {
result = result + new String(re);
}
in.close();
} catch (IOException ex) {
ex.printStackTrace();
result = "N/A";
}
return result.trim();
}
// 獲取CPU最小頻率(單位KHZ)
public static String getMinCpuFreq() {
String result = "";
ProcessBuilder cmd;
try {
String[] args = { "/system/bin/cat",
"/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq" };
cmd = new ProcessBuilder(args);
Process process = cmd.start();
InputStream in = process.getInputStream();
byte[] re = new byte[24];
while (in.read(re) != -1) {
result = result + new String(re);
}
in.close();
} catch (IOException ex) {
ex.printStackTrace();
result = "N/A";
}
return result.trim();
}
// 實(shí)時(shí)獲取CPU當(dāng)前頻率(單位KHZ)
public static String getCurCpuFreq() {
String result = "N/A";
try {
FileReader fr = new FileReader(
"/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq");
BufferedReader br = new BufferedReader(fr);
String text = br.readLine();
result = text.trim();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
// 獲取CPU名字
public static String getCpuName() {
try {
FileReader fr = new FileReader("/proc/cpuinfo");
BufferedReader br = new BufferedReader(fr);
String text = br.readLine();
String[] array = text.split(":s+", 2);
for (int i = 0; i array.length; i++) {
}
return array[1];
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
2、內(nèi)存:/proc/meminfo
復(fù)制代碼 代碼如下:
public void getTotalMemory() {
String str1 = "/proc/meminfo";
String str2="";
try {
FileReader fr = new FileReader(str1);
BufferedReader localBufferedReader = new BufferedReader(fr, 8192);
while ((str2 = localBufferedReader.readLine()) != null) {
Log.i(TAG, "---" + str2);
}
} catch (IOException e) {
}
}
3、Rom大小
復(fù)制代碼 代碼如下:
public long[] getRomMemroy() {
long[] romInfo = new long[2];
//Total rom memory
romInfo[0] = getTotalInternalMemorySize();
//Available rom memory
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
romInfo[1] = blockSize * availableBlocks;
getVersion();
return romInfo;
}
public long getTotalInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
}
4、sdCard大小
復(fù)制代碼 代碼如下:
public long[] getSDCardMemory() {
long[] sdCardInfo=new long[2];
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
File sdcardDir = Environment.getExternalStorageDirectory();
StatFs sf = new StatFs(sdcardDir.getPath());
long bSize = sf.getBlockSize();
long bCount = sf.getBlockCount();
long availBlocks = sf.getAvailableBlocks();
sdCardInfo[0] = bSize * bCount;//總大小
sdCardInfo[1] = bSize * availBlocks;//可用大小
}
return sdCardInfo;
}
5、電池電量
復(fù)制代碼 代碼如下:
private BroadcastReceiver batteryReceiver=new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
int level = intent.getIntExtra("level", 0);
// level加%就是當(dāng)前電量了
}
};
registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
6、系統(tǒng)的版本信息
復(fù)制代碼 代碼如下:
public String[] getVersion(){
String[] version={"null","null","null","null"};
String str1 = "/proc/version";
String str2;
String[] arrayOfString;
try {
FileReader localFileReader = new FileReader(str1);
BufferedReader localBufferedReader = new BufferedReader(
localFileReader, 8192);
str2 = localBufferedReader.readLine();
arrayOfString = str2.split("s+");
version[0]=arrayOfString[2];//KernelVersion
localBufferedReader.close();
} catch (IOException e) {
}
version[1] = Build.VERSION.RELEASE;// firmware version
version[2]=Build.MODEL;//model
version[3]=Build.DISPLAY;//system version
return version;
}
7、mac地址和開機(jī)時(shí)間
復(fù)制代碼 代碼如下:
public String[] getOtherInfo(){
String[] other={"null","null"};
WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if(wifiInfo.getMacAddress()!=null){
other[0]=wifiInfo.getMacAddress();
} else {
other[0] = "Fail";
}
other[1] = getTimes();
return other;
}
private String getTimes() {
long ut = SystemClock.elapsedRealtime() / 1000;
if (ut == 0) {
ut = 1;
}
int m = (int) ((ut / 60) % 60);
int h = (int) ((ut / 3600));
return h + " " + mContext.getString(R.string.info_times_hour) + m + " "
+ mContext.getString(R.string.info_times_minute);
}
隨著智能手機(jī)的不斷發(fā)展以及用戶需求的不斷增加,手機(jī)的運(yùn)行內(nèi)存(RAM)的大小已經(jīng)從MB過渡到了GB容量,作為用戶的我們只是知道運(yùn)行內(nèi)存越大越好,而運(yùn)行內(nèi)存到底有什么用你知道么?接下來是我為大家收集的提升Android手機(jī)運(yùn)行內(nèi)存教程,希望能幫到大家。
提升Android手機(jī)運(yùn)行內(nèi)存教程
知識(shí)小科普
無應(yīng)用運(yùn)行時(shí)內(nèi)存占用已近半
這個(gè)時(shí)候就又到了筆者給大家科普的時(shí)候了。RAM全稱Random Access Memory,我們都習(xí)慣稱之為運(yùn)行內(nèi)存,又稱隨機(jī)存儲(chǔ)器。其是與CPU直接交換數(shù)據(jù)的內(nèi)部存儲(chǔ)器,也叫主存(內(nèi)存)。它可以隨時(shí)讀寫,并且速度很快,通常作為系統(tǒng)或正在運(yùn)行程序的臨時(shí)數(shù)據(jù)存儲(chǔ)媒介。
為啥安卓手機(jī)更吃內(nèi)存
看到這你可能深深的認(rèn)為RAM還是越大越好,對(duì)沒錯(cuò)筆者也是這么認(rèn)為的。縱觀安卓手機(jī)的發(fā)展,RAM已經(jīng)從最初的128MB發(fā)展到了現(xiàn)在的6GB(消息稱8GB已經(jīng)在路上),而蘋果從最初的128MB至今RAM也不過才發(fā)展到2GB而已,但仍然可以流暢運(yùn)行,這又是為何呢?
iOS VS Android(圖片引自antutu)
這就完全要?dú)w結(jié)于安卓和蘋果不同的內(nèi)存運(yùn)行機(jī)制。安卓系統(tǒng)在運(yùn)行一個(gè)程序時(shí):CPU開始計(jì)算-內(nèi)存開始緩存-再讀取目標(biāo)文件開始計(jì)算,當(dāng)結(jié)束程序時(shí)CPU計(jì)算完畢但內(nèi)存仍然有部分緩存占用。而蘋果就不同當(dāng)CPU開始運(yùn)算后就會(huì)收集所有內(nèi)存為應(yīng)用運(yùn)行進(jìn)行緩存,在結(jié)束應(yīng)用時(shí)會(huì)釋放全部?jī)?nèi)存。
用戶的內(nèi)存不足解決之道
對(duì)于一般用戶來說就是安裝各類清理軟件,卸載多余不常用APP,軟件關(guān)閉后及時(shí)清理后臺(tái)。目前許多手機(jī)中還加入了后臺(tái)應(yīng)用管理的功能并提供一鍵清理選項(xiàng),實(shí)在受不了的時(shí)候就對(duì)手機(jī)進(jìn)行一次出廠化設(shè)置。
手機(jī)中自帶的權(quán)限管理應(yīng)用
對(duì)于安卓有一定了解的用戶,則會(huì)選擇精簡(jiǎn)版的ROM來進(jìn)行刷機(jī)(一般情況下系統(tǒng)的精簡(jiǎn)度是和流暢性成正比的),并通過ROOT獲取權(quán)限,從根本控制軟件的自啟及對(duì)內(nèi)存的占用。
各類刷機(jī)軟件中都提供精簡(jiǎn)版ROM一鍵刷機(jī)和一鍵ROOT(圖片引自romjd)
而那些動(dòng)手能力極強(qiáng)的用戶還會(huì)選擇一些特別的方法,比如通過創(chuàng)建Swap(交換分區(qū))來解決,當(dāng)用戶的實(shí)體內(nèi)存不足時(shí)便會(huì)調(diào)用這部分虛擬內(nèi)存來運(yùn)行應(yīng)用。
Linux中的Swap即交換分區(qū),類似于Windows的虛擬內(nèi)存,就是當(dāng)內(nèi)存不足的時(shí)候,把一部分硬盤空間虛擬成內(nèi)存使用,從而解決內(nèi)存容量不足的情況。而Android正是基于Linux研發(fā)的操作系統(tǒng),所以也可以使用Swap分區(qū)來提升系統(tǒng)運(yùn)行效率。
對(duì)于安卓手機(jī)如何創(chuàng)建Swap的具體過程筆者就不做過多介紹,不過首先你的手機(jī)內(nèi)核需要支持Swap,并且已ROOT,可以利用內(nèi)置存儲(chǔ)或內(nèi)存卡(需注意卡片讀寫速度)進(jìn)行制作,詳細(xì)方法及所需軟件請(qǐng)執(zhí)行百度。
看了“提升Android手機(jī)運(yùn)行內(nèi)存教程”還想看:
1. 安卓手機(jī)運(yùn)行內(nèi)存不夠用的解決方法
2. 怎樣能刷運(yùn)行內(nèi)存
3. 安卓手機(jī)運(yùn)行內(nèi)存太小怎么優(yōu)化
4. 怎樣擴(kuò)大手機(jī)內(nèi)部?jī)?nèi)存
5. 怎樣擴(kuò)展手機(jī)最大內(nèi)存
打開手機(jī)找到設(shè)置點(diǎn)擊進(jìn)入
在設(shè)置里面往下翻找到【關(guān)于手機(jī)】
點(diǎn)擊【關(guān)于手機(jī)】
進(jìn)入后顯示手機(jī)各項(xiàng)詳細(xì)數(shù)據(jù)
看下大致內(nèi)存使用情況 (free+buffers+cached)
proc/meminfo 機(jī)器的內(nèi)存使用信息
/proc/pid/maps pid為進(jìn)程號(hào),顯示當(dāng)前進(jìn)程所占用的虛擬地址。
/proc/pid/statm 進(jìn)程所占用的內(nèi)存
df 查看 存儲(chǔ)空間使用情況
ps -t |grep system_server (或?surfaceflinger,?service manager,?media server,zygote) ( 倒數(shù)第二個(gè)是不是 s)?異常情況有如’D’,?‘T’,?‘Z’?,?‘R’等
dumpsys meminfo com.android.mms 打印一個(gè)app的mem信息
從以上打印可以看出,一般來說內(nèi)存占用大小有如下規(guī)律:VSS = RSS = PSS = USS
VSS - Virtual Set Size 虛擬耗用內(nèi)存(包含共享庫(kù)占用的內(nèi)存)是單個(gè)進(jìn)程全部可訪問的地址空間
RSS - Resident Set Size 實(shí)際使用物理內(nèi)存(包含共享庫(kù)占用的內(nèi)存)是單個(gè)進(jìn)程實(shí)際占用的內(nèi)存大小,對(duì)于單個(gè)共享庫(kù), 盡管無論多少個(gè)進(jìn)程使用,實(shí)際該共享庫(kù)只會(huì)被裝入內(nèi)存一次。
PSS - Proportional Set Size 實(shí)際使用的物理內(nèi)存(比例分配共享庫(kù)占用的內(nèi)存)
USS - Unique Set Size 進(jìn)程獨(dú)自占用的物理內(nèi)存(不包含共享庫(kù)占用的內(nèi)存)
USS 是針對(duì)某個(gè)進(jìn)程開始有可疑內(nèi)存泄露的情況,進(jìn)行檢測(cè)的最佳數(shù)字。懷疑某個(gè)程序有內(nèi)存泄露可以查看這個(gè)值是否一直有增加
使用dumpsys meminfo查看內(nèi)存信息
腳本:
adb shell ps -t tsq/ps.txt
adb shell top -t -m 5 -n 2 tsq/top.txt
adb shell service list ? tsq/serviceList.txt
adb shell cat /proc/meminfo tsq/meminfo
adb shell cat /proc/buddyinfo tsq/buddyinfo
adb shell procrank tsq/procrank.txt
adb shell cat proc/sched_debug tsq/sched_debug.txt
adb shell cat proc/interrupts tsq/interrupts.txt
adb shell dumpstate tsq/dumpstate.txt
adb shell bugreport tsq/bugreport.txt
@echo "finish."
pause
新聞標(biāo)題:android獲取內(nèi)存,獲取手機(jī)內(nèi)存
標(biāo)題URL:http://chinadenli.net/article10/dsgihdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、自適應(yīng)網(wǎng)站、App設(shè)計(jì)、域名注冊(cè)、網(wǎng)頁(yè)設(shè)計(jì)公司、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)