2016-08-19 2 views
0

Ich wollte die Hilfsmethode isLowRamDevice für meine App verwenden, die Videos streamt. Da ich Geräte unten API-Ebene 15 unterstütze, musste ich ActivityManagerCompat.isLowRamDevice() verwenden. Ich war wirklich verwirrt, dass es immer falsch zurückgegeben wurde, auch wenn ich wirklich alte Geräte benutze. Dann überprüfte ich die Methode selbst und sah dies:ActivityManagerCompat.isLowRamDevice ist nutzlos, gibt immer false zurück

public static boolean isLowRamDevice(@NonNull ActivityManager am) { 
     if (Build.VERSION.SDK_INT >= 19) { 
      return ActivityManagerCompatKitKat.isLowRamDevice(am); 
     } 
     return false; 
    } 

Also kein Wunder, dass es immer falsch auf meinem Android 4.0.4 Gerät zurückgibt. Aber für mich macht das absolut keinen Sinn. Oder fehlt mir etwas?

Antwort

2

Kein Wunder also, es gibt immer false zurück

Es nicht immer false zurück.

Auf Geräten mit Android 4.3 oder älter wird immer false zurückgegeben. Das liegt daran, dass das System-Flag für ein Niedrig-RAM-Gerät damals nicht existierte.

Bei Geräten Android 4.4 oder höher ausgeführt wird, wird es den Wert des System-Flag zurück zum ob dies eine Nieder RAM-Vorrichtung ist oder nicht:

/** 
* Returns true if this is a low-RAM device. Exactly whether a device is low-RAM 
* is ultimately up to the device configuration, but currently it generally means 
* something in the class of a 512MB device with about a 800x480 or less screen. 
* This is mostly intended to be used by apps to determine whether they should turn 
* off certain features that require more RAM. 
*/ 
public boolean isLowRamDevice() { 
    return isLowRamDeviceStatic(); 
} 

/** @hide */ 
public static boolean isLowRamDeviceStatic() { 
    return "true".equals(SystemProperties.get("ro.config.low_ram", "false")); 
} 

(von the ActivityManager source code)

AFAIK, Niedrig-RAM-Geräte werden meistens Android One Geräte sein. Je nachdem, wo Sie Ihre Geräte erhalten, können Sie keines davon entdecken.

+0

Sicher, aber Geräte mit Android 4.3 oder älter sind eher LowRamDevices. Warum haben sie diese Methode für ältere Geräte über support lib verfügbar gemacht? Das macht absolut keinen Sinn. – JensJensen

+0

@JensJensen: "Geräte mit Android 4.3 oder älter sind wahrscheinlicher LowRamDevices" - nicht unbedingt nach Googles Definition von Low-RAM-Geräten. "Warum haben sie diese Methode für ältere Geräte über Support-Bibliotheken verfügbar gemacht?" - so ziemlich alle Klassen, die auf "... Compat" enden. Sie rufen die reale Implementierung auf kompatiblen Geräten auf und geben einige Stubs auf älteren Geräten zurück. Manchmal ist der Stub anspruchsvoller. In diesem Fall stimme ich zu, dass sie einen Wert basierend auf dem tatsächlichen Geräte-RAM abgeleitet haben sollten. – CommonsWare

+0

Die Implementierung stimmt mit anderen Support-Bibliotheken überein. Es klingt so, als würden Sie alte Geräte als Low-Ram behandeln, also würde ich sagen, dass Sie lieber den Aufruf und die API-Version in und den isLowRamDevice() -Flag zusammen abstrahieren. –

Verwandte Themen