Chcę uzyskać pełny rozmiar pamięci RAM urządzenia. memoryInfo.getTotalPss()
zwraca 0. Nie ma funkcji do uzyskania całkowitego rozmiaru pamięci RAM w ActivityManager.MemoryInfo
.Jak uzyskać całkowity rozmiar pamięci RAM urządzenia?
Jak to zrobić?
Chcę uzyskać pełny rozmiar pamięci RAM urządzenia. memoryInfo.getTotalPss()
zwraca 0. Nie ma funkcji do uzyskania całkowitego rozmiaru pamięci RAM w ActivityManager.MemoryInfo
.Jak uzyskać całkowity rozmiar pamięci RAM urządzenia?
Jak to zrobić?
Standardowy UNIX komenda: $ cat /proc/meminfo
Zauważ, że /proc/meminfo
jest plikiem. W rzeczywistości nie musisz uruchamiać cat
, możesz po prostu przeczytać plik.
I trzcina/proc/meminfo i odebrany rozmiar pamięci RAM. – BOOMik
Powrócił do oryginalnej wersji tej odpowiedzi autora. Podczas gdy Leon wysyła coś, co działa na późniejszych poziomach interfejsu API, nie oznacza to, że ta metoda już nie działa. Edycji przez osobę trzecią nie należy używać do komentowania odpowiedzi - taka jest rola komentarzy, a w tym przypadku - samej odpowiedzi Leona. –
Dodatkowo dodam, że z kodu działającego na urządzeniu, nie ma powodu, aby uruchamiać proces 'cat' - zamiast tego po prostu przeczytaj'/proc/meminfo' z twojego kodu java lub natywnego, jakby był plikiem tekstowym . Cat byłby potrzebny tylko wtedy, gdy pracowałeś w powłoce lub korzystałeś z czegoś, co wymagało uruchomienia procesu pod innym identyfikatorem użytkownika za pomocą zhackowanego 'su'. –
Od poziomu interfejsu API 16 można teraz używać właściwości totalMem
klasy MemoryInfo
.
jak poniżej:
ActivityManager actManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
actManager.getMemoryInfo(memInfo);
long totalMemory = memInfo.totalMem;
poziom API 15 i dolnego ciągle wymaga użycia polecenia Unix'owych pokazano na cweiske's answer.
mogę użytkową pamięć RAM w taki sposób
public String getTotalRAM() {
RandomAccessFile reader = null;
String load = null;
DecimalFormat twoDecimalForm = new DecimalFormat("#.##");
double totRam = 0;
String lastValue = "";
try {
reader = new RandomAccessFile("/proc/meminfo", "r");
load = reader.readLine();
// Get the Number value from the string
Pattern p = Pattern.compile("(\\d+)");
Matcher m = p.matcher(load);
String value = "";
while (m.find()) {
value = m.group(1);
// System.out.println("Ram : " + value);
}
reader.close();
totRam = Double.parseDouble(value);
// totRam = totRam/1024;
double mb = totRam/1024.0;
double gb = totRam/1048576.0;
double tb = totRam/1073741824.0;
if (tb > 1) {
lastValue = twoDecimalForm.format(tb).concat(" TB");
} else if (gb > 1) {
lastValue = twoDecimalForm.format(gb).concat(" GB");
} else if (mb > 1) {
lastValue = twoDecimalForm.format(mb).concat(" MB");
} else {
lastValue = twoDecimalForm.format(totRam).concat(" KB");
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
// Streams.close(reader);
}
return lastValue;
}
Testowane Upto Androida 4.3: Samsung S3
można uzyskać całkowitą wielkość pamięci RAM przy użyciu tego kodu:
var activityManager = GetSystemService(Activity.ActivityService) as ActivityManager; var memoryInfo = new ActivityManager.MemoryInfo(); activityManager.GetMemoryInfo(memoryInfo); var totalRam = memoryInfo.TotalMem/(1024 * 1024);
Jeśli urządzenie ma 1 GB pamięci RAM, całkowita wartość będzie równa 1000.
Twój kod składni i metody nie są poprawne w java. Czy Twój kod jest w języku C# i xamarin? – amin
Tak, napisałem to tylko po to, żeby mieć bazę. –
'publiczny statyczny zsynchronizowany int readTotalRam() { \t \t int tm = 1000; \t try { \t RandomAccessFile reader = new RandomAccessFile ("/ proc/meminfo", "r"); \t Łańcuch load = reader.readLine(); \t Ciąg [] totrm = load.split ("kB"); \t Ciąg [] trm = totrm [0] .split (""); \t tm = Integer.parseInt (trm [trm.length-1]); \t tm = Math.round (tm/1024); \t} catch (IOException ex) { \t ex.printStackTrace(); \t} \t return tm; \t} ' – BOOMik
Piszę do tego funkcję. ^^^ odpowiedz ^^^ – BOOMik