Как я не могу установить приложение размером 338 КБ, когда у меня свободно 474 МБ?

У меня телефон Моторола с 8 Гб встроенной памяти.

К моему удивлению, через несколько дней у меня было 474 МБ свободного места, но я не мог установить приложение размером 338 КБ! Таким образом, очевидно, что ограничение в ~25 МБ, упомянутое в некоторых комментариях ( здесь и здесь ), не всегда имеет место. Пользователь только что сказал мне следующее:

На самом деле это «25 МБ или 10% хранилища», в зависимости от того, что будет поражено раньше. Таким образом, например, с 10 ГБ встроенной памяти вы почувствуете себя, как только у вас останется меньше 1 ГБ свободного места. Сумасшествие, но это то, что есть.

На самом деле, это неправильно, потому что мне не нужно было освобождать 1 ГБ внутренней памяти. Но в любом случае полгигабайта достаточно для полноценной работы операционной системы. Я видел подобные жалобы на то, что сотен МБ недостаточно для установки приложений ~ 1 МБ или подобных мелких операций ( здесь и здесь ).

Что здесь не так?

Я ненавижу, что есть люди, которые всегда хотят защитить имидж сильных мира сего, как бы плохо это ни было. Не мог бы ты перестать быть таким раболепным?
Все нытье, которое вы, кажется, настаиваете на том, чтобы перелопачивать сайт, является совершенно неуместным шумом. В Интернете есть бесчисленное множество мест, где вы можете пожаловаться на свои личные проблемы. Это не одно из тех мест. Нас не волнует, как вы воспримете, что кто-то (или какая-то компания) лично оскорбил вас, нам просто нужна информация, которая имеет отношение к ответу на ваш вопрос.
хорошо, мистер плохой защитник.

Ответы (1)

Примечание: цитируемым пользователем был я. А вот и ссылка . Чтобы объяснить, почему в вашем случае не было 10%, вот исключение из-за ссылки: «Пока производитель устройства не изменит настройки по умолчанию». Таким образом, эти 10% являются настройкой по умолчанию, но, очевидно, могут быть изменены «пекарем ПЗУ». Как часто это делается, я не могу сказать; поскольку этот пост был из 2011 года, правило могло даже измениться за это время (хотя я об этом тоже не слышал).

Поэтому я просто применил немного «гугл-фу»: в Android 4.1.1 все еще есть комментарий

Если свободное хранилище на устройстве меньше настраиваемого порогового значения (параметр настроек безопасности; по умолчанию 10%), отображается уведомление о нехватке памяти, чтобы предупредить пользователя».

(выделено мной). Обратите внимание на термин «настраиваемый порог», который делает очевидным, что этот порог можно изменить/отрегулировать. Для Android 4.1.1 вы можете найти его в строке 67:

private static final int DEFAULT_THRESHOLD_PERCENTAGE = 10;

Это переменная класса; но, не будучи разработчиком Android, я не могу сказать, как его можно перезаписать. Это, безусловно, потребует системных разрешений (или просто приложения с WRITE_SECURE_SETTINGSразрешением? ). Цитирование последнего кода :

 * This class implements a service to monitor the amount of disk
 * storage space on the device.  If the free storage on device is less
 * than a tunable threshold value (a secure settings parameter;
 * default 10%) a low memory notification is displayed to alert the
 * user. If the user clicks on the low memory notification the
 * Application Manager application gets launched to let the user free
 * storage space.

Как видите, правило 10% все еще существует. Но DEFAULT_THRESHOLD_PERCENTAGEпеременная исчезла (и заменена на mMemLowThreshold, которая, похоже, теперь установлена ​​в другом классе — см. строку 361 ).


TL;DR: все тот же порог в 10% все еще применяется, но «пекарь ПЗУ» (который создает ПЗУ) может его скорректировать. Разработчик с более глубоким пониманием может сказать, можно ли его настроить другими способами, например, специальным приложением с разрешением WRITE_SECURE_SETTINGSили даже просто через ADB.

Кажется, вы полностью упускаете из виду: проблема не в том, что я получаю сообщение о нехватке памяти, а в том, что я НЕ МОГУ УСТАНОВИТЬ абсурдно маленькое приложение.
Однажды я играл в авиасимулятор от Silicon Graphics, который помещался на дискету емкостью 1,44 МБ. Просто чтобы дать представление о том, насколько велики 474 МБ. Если это не пример запланированного устаревания, то я не знаю, что это такое.
Вы не могли установить это, потому что система решила, что у вас мало памяти, поэтому она отправила вам это сообщение. Даже если бы размер APK был 1 КБ, нет — это нет. Оставшееся пространство сохраняется, чтобы гарантировать, что система не полностью исчерпает хранилище для своих «повседневных дел». Новая проверка выполняется обычно два раза в день или если доступное хранилище изменилось не менее чем на 2 МБ, если я правильно помню код. Извините, это не я упускаю суть. Я понимаю, что это может показаться неудовлетворительным – но вы хотели причин, и я их привел (даже указал на возможный выход).
Они могли бы отобразить сообщение: «Установка этого приложения может замедлить работу вашей системы и даже сделать некоторые операции и обновления недоступными. Вы уверены, что хотите продолжить? PS у вас будет возможность удалить его позже, вернув систему к полноценной работе. ." Или, может быть, 474 МБ нужны только для удаления любого приложения? Или, может быть, это сообщение было бы слишком сложным для обычного пользователя «Гомер Симпсон»? (Но если порог может быть изменен пользователем, значит, это не НАСТОЛЬКО сложно. Почему бы не включить ссылку на него в сообщение?) Или, может быть, это просто «мягкое запланированное устаревание», кто сейчас этого не делает?
«Или, может быть, это сообщение было бы слишком сложным для обычного пользователя« Гомера Симпсона »?» Может быть, они хотели, чтобы это было просто, да. "Но если порог может быть изменен пользователем" Кто так сказал? Если это так, то кто-то забыл указать где и как :) Как я уже писал, судя по комментариям в коде (которые ни один "средний пользователь" никогда не читает) вроде бы есть возможность. Хотя я никогда не читал, как к этому может подойти пользователь . И извините, на все "почему" я не знаю ответа. Хотелось бы предложить вам более четкое «исправление».
Примечание. Я опубликовал «продолжение», которое вы, возможно, захотите посмотреть: как настроить пороговое значение для события «недостаточно памяти»? У меня нет ответа на этот вопрос (или я включил его в свой ответ здесь), но, надеюсь, изложил это таким образом, чтобы один из наших членов с «более глубоким пониманием» мог бы ответить на него.