Я хотел использовать вспомогательный метод isLowRamDevice
для моего приложения, которое передает потоки видео. Поскольку я поддерживаю устройства вниз, применяю API-уровень 15, мне пришлось использовать ActivityManagerCompat.isLowRamDevice()
. Я был очень смущен, что он всегда возвращался неверно, даже если я использую действительно старые устройства. Затем я проверил сам метод и увидел следующее:ActivityManagerCompat.isLowRamDevice бесполезен, всегда возвращает false
public static boolean isLowRamDevice(@NonNull ActivityManager am) {
if (Build.VERSION.SDK_INT >= 19) {
return ActivityManagerCompatKitKat.isLowRamDevice(am);
}
return false;
}
Неудивительно, что он всегда возвращает false на моем устройстве Android 4.0.4. Но для меня это не имеет никакого смысла. Или я чего-то не хватает?
Уверены, но устройства под управлением Android 4.3 или старше, скорее всего, lowRamDevices. Итак, почему они сделали этот метод доступным для более старых устройств через lib? Это не имеет никакого смысла. – JensJensen
@JensJensen: «устройства под управлением Android 4.3 или старше более вероятны lowRamDevices» - не обязательно по определению Google для устройств с низким ОЗУ. «Почему они сделали этот метод доступным для более старых устройств через библиотеку поддержки?» - Практически все классы, заканчивающиеся на '... Compat', работают таким образом. Они переходят к реальной реализации на совместимых устройствах и возвращают некоторые заглушки на более старые устройства. Иногда заглушка более изощренна. В этом случае я согласен, что они должны были получить значение, основанное на фактической ОЗУ устройства. – CommonsWare
Реализация согласуется с другими библиотеками поддержки. Похоже, вы хотите относиться к старым устройствам как к низковольтному, поэтому я бы сказал, что вам лучше абстрагировать вызов и проверить версию API и флаг isLowRamDevice(). –