2011-09-10 19 views
17

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ć?

+1

'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

+1

Piszę do tego funkcję. ^^^ odpowiedz ^^^ – BOOMik

Odpowiedz

19

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.

+0

I trzcina/proc/meminfo i odebrany rozmiar pamięci RAM. – BOOMik

+0

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. –

+0

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'. –

25

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.

15

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

2

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.

+0

Twój kod składni i metody nie są poprawne w java. Czy Twój kod jest w języku C# i xamarin? – amin

+0

Tak, napisałem to tylko po to, żeby mieć bazę. –

Powiązane problemy