0

Я работаю на андроид проекта с несколькими другими разработчиками и ошибка была поднята где Instance государства не были сохранены по сбору мусора: сообщилпоследствия памяти savedInstanceState

Фактическая ошибка:

приложение имеет одну активность с кучей фрагментов. Если «не выполнять действия» проверяется в настройках разработчика, и пользователь нажимает на любую кнопку, которая изменяет видимые фрагменты, а затем переходит от приложения, а затем обратно, он перезапускает приложение в исходное состояние, а не в последнем состоянии ,

Другой Dev по проекту поднял следующую озабоченность:.

«Сохранение экземпляров заставят приложения размера памяти раздуваться Уже из-за количества вводимого коэффициента, размер приложения памяти слишком высокий.

Это нормально, если приложение перезапускается через некоторое время без использования пользователем ».

Мое понимание заключалось в том, что сэкономленный пакетInstance Bundle фактически записывается в физическую память, не так ли? Является ли приведенная выше цитата действительной проблемой?

ответ

3

Мое понимание заключалось в том, что сэкономленный пакетInstance Bundle фактически записывается в физическую память, не так ли?

Я интерпретирую «записанный в физическую память» как означающий «записанный в файл в файловой системе» (a.k.a., «persisted»).

Состояние экземпляра Bundle не сохраняется. Android 5.0+ дает вам другой крючок для PersistableBundle, который is сохраняется и, следовательно, переживает перезагрузку.

Однако состояние экземпляра Bundle передается через границы процесса в основной процесс ОС. Эти данные затем можно использовать, если ваш процесс завершен, но пользователь возвращается к вашему приложению, пока ваша задача все еще находится (например, через список недавних задач).

Является ли приведенная выше цитата действительной заботой?

только часть этой цитаты, которые могут быть обоснованно оценены людьми здесь ТАК:

Экономия случаев будет вызывать приложения в объеме памяти раздуваться

Сохранение один байт в Bundle будет потреблять больше памяти, чем сохранение нулевых байтов в Bundle. Следовательно, математически, цитата точна. Ключ должен содержать Bundle маленький. В любом случае, они не могут быть слишком большими по другим причинам (ограничение 1 МБ для вызовов IPC). Небольшое состояние экземпляра Bundles не должно быть проблемой.

+0

математически говоря, что сохранение состояния экземпляров вызовет приложение для раздувания вашего математического решения, является ошибочным поспешным обобщением, потому что один байт не раздувает. – danny117

0

Правильно закодированное состояние saveinstance будет сохраняться в фоновом режиме в течение нескольких недель за раз и не требует больше, чем несколько байтов в худшем случае, всего несколько батов.

У вашего другого разработчика есть проблема с кривой обучения.

InstanceState сохраняет то, что вам нужно, чтобы воссоздать способ, которым приложение в настоящее время выглядит для пользователя. Давайте использовать аналог tic tac toe. У вас есть девять позиций. Каждая позиция x o или пустая. и вы спасете, кто его превращает. Десять строк символов не раздуваются здесь, это не ракетостроение.

InstanceState для приложения с 10 рисунков на экране. вы сохраняете чертежи во внешнем хранилище как jpg или даже bmp. Затем вы сохраняете имя drawables в экземпляреState. 1000 символов, например, не напуганы, это компьютерная наука 1k для перезапуска очень сложного приложения.

SaveinstanceState не раздувает изделия своим замечательным приложением.

Смежные вопросы