欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

android獲取內(nèi)存,android 獲取可用內(nèi)存

Android獲取系統(tǒng)cpu信息,內(nèi)存,版本,電量等信息

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

創(chuàng)新互聯(lián)建站專注于泰州網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供泰州營銷型網(wǎng)站建設(shè),泰州網(wǎng)站制作、泰州網(wǎng)頁設(shè)計(jì)、泰州網(wǎng)站官網(wǎng)定制、微信小程序定制開發(fā)服務(wù),打造泰州網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供泰州網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

通過讀取文件/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" 存儲最大頻率的文件的.路徑

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

}

如何查看Android手機(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ù)

android系統(tǒng)中查看內(nèi)存信息

看下大致內(nèi)存使用情況 (free+buffers+cached)

proc/meminfo 機(jī)器的內(nèi)存使用信息

/proc/pid/maps pid為進(jìn)程號,顯示當(dāng)前進(jìn)程所占用的虛擬地址。

/proc/pid/statm 進(jìn)程所占用的內(nèi)存

df 查看 存儲空間使用情況

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)存(包含共享庫占用的內(nèi)存)是單個(gè)進(jìn)程全部可訪問的地址空間

RSS - Resident Set Size 實(shí)際使用物理內(nèi)存(包含共享庫占用的內(nèi)存)是單個(gè)進(jìn)程實(shí)際占用的內(nèi)存大小,對于單個(gè)共享庫, 盡管無論多少個(gè)進(jìn)程使用,實(shí)際該共享庫只會被裝入內(nèi)存一次。

PSS - Proportional Set Size 實(shí)際使用的物理內(nèi)存(比例分配共享庫占用的內(nèi)存)

USS - Unique Set Size 進(jìn)程獨(dú)自占用的物理內(nèi)存(不包含共享庫占用的內(nèi)存)

USS 是針對某個(gè)進(jìn)程開始有可疑內(nèi)存泄露的情況,進(jìn)行檢測的最佳數(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

提升Android手機(jī)運(yùn)行內(nèi)存教程

隨著智能手機(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)存教程

知識小科普

無應(yīng)用運(yùn)行時(shí)內(nèi)存占用已近半

這個(gè)時(shí)候就又到了筆者給大家科普的時(shí)候了。RAM全稱Random Access Memory,我們都習(xí)慣稱之為運(yùn)行內(nèi)存,又稱隨機(jī)存儲器。其是與CPU直接交換數(shù)據(jù)的內(nèi)部存儲器,也叫主存(內(nèi)存)。它可以隨時(shí)讀寫,并且速度很快,通常作為系統(tǒng)或正在運(yùn)行程序的臨時(shí)數(shù)據(jù)存儲媒介。

為啥安卓手機(jī)更吃內(nèi)存

看到這你可能深深的認(rèn)為RAM還是越大越好,對沒錯(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)算后就會收集所有內(nèi)存為應(yīng)用運(yùn)行進(jìn)行緩存,在結(jié)束應(yīng)用時(shí)會釋放全部內(nèi)存。

用戶的內(nèi)存不足解決之道

對于一般用戶來說就是安裝各類清理軟件,卸載多余不常用APP,軟件關(guān)閉后及時(shí)清理后臺。目前許多手機(jī)中還加入了后臺應(yīng)用管理的功能并提供一鍵清理選項(xiàng),實(shí)在受不了的時(shí)候就對手機(jī)進(jìn)行一次出廠化設(shè)置。

手機(jī)中自帶的權(quán)限管理應(yīng)用

對于安卓有一定了解的用戶,則會選擇精簡版的ROM來進(jìn)行刷機(jī)(一般情況下系統(tǒng)的精簡度是和流暢性成正比的),并通過ROOT獲取權(quán)限,從根本控制軟件的自啟及對內(nèi)存的占用。

各類刷機(jī)軟件中都提供精簡版ROM一鍵刷機(jī)和一鍵ROOT(圖片引自romjd)

而那些動(dòng)手能力極強(qiáng)的用戶還會選擇一些特別的方法,比如通過創(chuàng)建Swap(交換分區(qū))來解決,當(dāng)用戶的實(shí)體內(nèi)存不足時(shí)便會調(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)行效率。

對于安卓手機(jī)如何創(chuàng)建Swap的具體過程筆者就不做過多介紹,不過首先你的手機(jī)內(nèi)核需要支持Swap,并且已ROOT,可以利用內(nèi)置存儲或內(nèi)存卡(需注意卡片讀寫速度)進(jìn)行制作,詳細(xì)方法及所需軟件請執(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)部內(nèi)存

5. 怎樣擴(kuò)展手機(jī)最大內(nèi)存

Android內(nèi)存的相關(guān)排查方法

dumpsys meminfo 是Android系統(tǒng)提供的查詢內(nèi)存命令,用該命令可以看到:

每個(gè)進(jìn)程占用的物理內(nèi)存大小

系統(tǒng)內(nèi)存分布狀態(tài),包括

總的可用物理內(nèi)存 Total RAM

當(dāng)前可用物理內(nèi)存 Free RAM

已用物理內(nèi)存 Used RAM

不可見內(nèi)存 Lost RAM

比如輸入該命令后輸出如下日志:

該命令打印的最后一部分,反應(yīng)系統(tǒng)級別的內(nèi)存狀況:

Total RAM: 1015868 kB

Free RAM: 638914 kB (105418 cached pss + 180168 cached + 353328 free)

Used RAM: 211428 kB (186096 used pss + 8008 buffers + 520 shmem + 16804 slab)

Lost RAM: 165526 kB

Tuning: 96 (large 256), oom 20480 kB, restore limit 6826 kB (high-end-gfx)

里面某些字段的意義需要注意:

dumpsys meminfo

OOM Killer(Out Of Memory Killer) 是Linux當(dāng)中,內(nèi)存保護(hù)機(jī)制的一種。當(dāng)物理內(nèi)存幾乎耗盡而又需要分配新內(nèi)存時(shí),會殺掉一些優(yōu)先級低的進(jìn)程,釋放內(nèi)存。

LowMemoryKiller 是Android的內(nèi)存保護(hù)機(jī)制。當(dāng)物理內(nèi)存低于閾值,就會殺掉一些優(yōu)先級低的進(jìn)程,釋放內(nèi)存。

聯(lián)系:LowMemoryKiller 用到了 OOM Killer 的評分機(jī)制

區(qū)別:LowMemoryKiller 是通過閾值觸發(fā),OOM Killer 是分配內(nèi)存失敗時(shí)觸發(fā)

評分原理:

oom_adj,代表進(jìn)程的優(yōu)先級, 數(shù)值越大,優(yōu)先級越低,越容易被殺。系統(tǒng)分16個(gè)級別(取值范圍[-16, 15]整數(shù),不連續(xù))

通過 cat /proc/xxx/oom_adj 查看,其中xxx是進(jìn)程號

oom_score_adj: 在 oom_adj 基礎(chǔ)上的評分,取值范圍[-1000, 1000]

通過 cat /proc/xxx/oom_score_adj 查看,其中xxx是進(jìn)程號

閾值查看,以98mv100為例:

cat /sys/module/lowmemorykiller/parameters/minfree

1024,1536,2048,3072,3584,4096

cat /sys/module/lowmemorykiller/parameters/adj

0,58,117,176,529,1000

上訴數(shù)值表示:可用內(nèi)存低于 4096 4K 時(shí),殺掉 oom_score_adj=1000 的應(yīng)用;可用內(nèi)存低于 3584 4K 時(shí),殺掉 oom_score_adj=529 的應(yīng)用,以此類推。

因此,客戶可以通過調(diào)整 minfree 的閾值來觸發(fā) LowMemoryKiller 更頻繁地殺應(yīng)用,從而為高優(yōu)先級應(yīng)用省下內(nèi)存。

在 dumpsys meminfo 中,GPU內(nèi)存被統(tǒng)計(jì)到了 Lost RAM 里面了。

因此,當(dāng)應(yīng)用占用GPU內(nèi)存過高時(shí),不會體現(xiàn)在 Used RAM 里面,而是體現(xiàn)在 Lost RAM 中。反過來,如果發(fā)現(xiàn)有問題的時(shí)候 Lost RAM 很高,就需要看看GPU內(nèi)存使用情況了。用以下命令:?

mount -t debugfs debugfs /sys/kernel/debug/

cat /sys/kernel/debug/mali/gpu_memory

130|root@MR820:/ # cat /sys/kernel/debug/mali/gpu_memory

Name (:bytes) pid mali_mem max_mali_mem external_mem ump_mem dma_mem

其中mali_mem列就是應(yīng)用占用的GPU內(nèi)存

分享標(biāo)題:android獲取內(nèi)存,android 獲取可用內(nèi)存
網(wǎng)站網(wǎng)址:http://chinadenli.net/article40/dsgjseo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊外貿(mào)建站微信小程序標(biāo)簽優(yōu)化云服務(wù)器電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化