Что происходит с кодом, когда кто-то закрывает или убивает приложение?

Я искал способ хранения данных для своего приложения и пытался выбирать между различными методами (onSaveInstanceState, onPause/onResume) и различные методы хранения (состояния в onSaveInstanceState, SQLite, Настройки ).

Мне любопытно, что происходит с каждым из этих методов хранения, когда пользователь делает определенные вещи. В частности, я хочу знать, какие методы вызываются и какие данные стираются, когда:

  • Пользователь нажимает кнопку переключения задач (внизу справа), а затем закрывает оверлей в течение нескольких секунд, и все это из приложения.
  • Пользователь нажимает «Домой», не смахивая приложение из переключателя задач, а затем снова открывает приложение.
  • Пользователь нажимает кнопку «Домой», смахивает приложение из переключателя задач, а затем снова открывает приложение.
  • Пользователь выходит из приложения, перезагружает телефон, затем открывает приложение
  • Пользователь выходит из приложения и использует Clean Master. (или любой другой менеджер хранилища), чтобы очистить кеш всех приложений или убить все фоновые задачи, а затем снова открывает приложение.
  • Пользователь обновляет приложение

person John Targaryen    schedule 22.04.2015    source источник
comment
Пожалуйста, укажите тип приложения, которое вы будете создавать, и тип данных, которые вы будете хранить. В противном случае точное описание методов, вызываемых в этих процессах, займет слишком много времени. Ваш конкретный вариант использования будет определять выбор вашей архитектуры, а ваша архитектура будет определять выбор обратных вызовов, которые вам нужно будет использовать.   -  person Stephan Branczyk    schedule 04.05.2015
comment
@StephanBranczyk, это хорошая идея; Я пытаюсь сохранить рекорды. В настоящее время я просто использую сохраненные настройки и помещаю 5-6 чисел в редактор, фиксирую и продолжаю. может быть более эффективный метод, поэтому я подробно остановился на различных возможностях выше.   -  person John Targaryen    schedule 04.05.2015


Ответы (2)


Я пытаюсь сохранить рекорды. В настоящее время я просто использую сохраненные настройки и помещаю 5-6 чисел в редактор, фиксирую и продолжаю. может быть более эффективный метод, поэтому я подробно остановился на различных возможностях выше.

Я предполагаю, что вы имели в виду SharedPreferences. И да, вы делаете это правильно. Ваши высокие баллы будут сохранены между запусками приложения. И делать то же самое с SQLite было бы излишним.

Единственный способ, которым пользователь может очистить данные, — щелкнуть Clear the Data или щелкнуть Uninstall ваше приложение.

Однако ни обновление самого приложения, ни нажатие Clear the cache ничего не сделают с SharedPreferences, пользователь должен будет нажать эту кнопку «Очистить данные», если он хочет, чтобы эти конкретные данные были очищены.

Что касается более эффективного метода, это зависит от того, что вы подразумеваете под этим. То, что вы делаете, это то, что сделал бы почти каждый разработчик. Это самое простое решение для работы, которое действительно работает. Например, если вы решили хранить эти данные в пакете между действиями, то все эти данные о высоких баллах будут потеряны между запусками приложения.

При этом вашего решения, очевидно, будет недостаточно, если вы будете играть в одну и ту же игру на нескольких устройствах, или если вы перейдете на новое устройство, или если вы удалите игру и переустановите ее позже. Для этого вы можете рассмотреть возможность использования сервисов Google Play для хранения этих данных для вы, как локально, так и в облаке.

person Stephan Branczyk    schedule 04.05.2015

  1. Когда пользователь переходит к переключателю задач и закрывает приложение, процесс приложения будет уничтожен, и все службы, работающие в фоновом режиме, также будут остановлены.
  2. Когда пользователь нажимает кнопку «Домой», не проводя пальцем по экрану переключателя задач, и повторно открывает приложение, приложение возобновляет работу. Вы можете получить более подробную информацию, если вы ищете жизненный цикл активности
  3. Когда пользователь нажимает кнопку «Домой» и удаляет приложение из переключателя задач, это эквивалентно уничтожению приложения, и процесс будет уничтожен, а также будут остановлены все службы, работающие в фоновом режиме.
  4. Когда пользователь выходит из приложения и перезагружает телефон, процесс завершается, и службы также уничтожаются. Но после перезапуска/перезагрузки устройства пользователь должен был написать логику для его перезапуска после перезапуска устройства или закрытия приложения.
  5. Когда пользователь выходит из приложения и очищает кеш, я бы предположил, что данные очищены. Так что это как свежее приложение.

Основываясь на моем понимании, я дал свой краткий ответ. Надеюсь, это дало некоторое представление.

person Santhana    schedule 22.04.2015
comment
№ 1, № 3, № 4 неверны: удаление приложения из последних приложений (то, что Google теперь называет экраном) не остановит работу каких-либо служб. Это только удалит приложение с экрана и, возможно, освободит память, используемую действиями. Вот почему даже после удаления GMaill вы все равно можете получать новые уведомления по электронной почте. Выход из приложения сам по себе не приведет к завершению процесса. - person Kai; 22.04.2015
comment
Хотя этот ответ определенно полезен, я искал что-то более конкретное: какие именно методы вызываются в этих процессах. - person John Targaryen; 24.04.2015
comment
# 5 Я думаю, что это тоже может быть неправильно. Многие люди очищают кеш, например, Reddit — ветка очистки мастер-функций, и это, кажется, не очищает их данные. - person John Targaryen; 24.04.2015
comment
@JoeBob, игнорируй ответ выше. Все равно большая часть неверна. Также не упоминался № 6, но данные сохраняются, если они были сохранены в SQLite, даже после обновления самого приложения (даже если схема была изменена, если разработчик этого хочет). - person Stephan Branczyk; 04.05.2015