Intereting Posts
Как возобновить работу с MediaPlayer в Android после нажатия кнопки «домой» и повторного открытия приложения Ionic / Cordova не обновляет версиюCode для Android Группировка нескольких из множества исходных кодов, имеющих точно такую ​​же конфигурацию Eclipse не показывает окно Avd manager и проект Android Является ли Opengl Development GPU зависимым? Преобразование gcc-команды в CMake для android ndk HttpClient не будет импортироваться в Android Studio Вызов приложений Google Map из приложения для Android, чтобы получить направление вращения Android P2P Многопользовательская игра (с) Обсуждение XMPP / Google b) JXTA peerdroid c) другим способом) Вложенные фрагменты зрителя в android 2.3.3 и 4.0 Android защищает mp3-файл, который является общим, но все же воспроизводится Универсальный коэффициент загрузки изображений Android: Как разрешить соединение с API Google не удается из Сервиса? Отправить запрос DELETE с помощью Volley (Android) в REST Api с параметрами? Невозможно исправить исключение MediaController.show ()

Когда сохранять данные в базе данных, onPause () или onStop ()?

Я знаю, что этот вопрос задан в миллион раз, я сам, хотя я уже знал ответ и что правильным было то, что единственным гарантированным вызовом является onPause (), поэтому вы должны сохранить свои данные там.

Однако во многих местах документации по Android они всегда предлагают не выполнять тяжелую работу (например, запись данных в базе данных) в методе onPause (), поскольку это задерживает переход между действиями.

Согласно Руководству разработчика Android в таблице 1

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

Убиваемый: ДА

Затем в соответствии с Справочным руководством Android Developer в аналогичной таблице .

Он говорит то же самое, но:

Killable: Pre-HONEYCOMB

И они добавляют небольшое примечание, в котором говорится:

Имейте в виду, что эта семантика немного изменится между приложениями, ориентированными на платформы, начиная с HONEYCOMB и с таргетинга на предыдущие платформы. Начиная с Honeycomb, приложение не находится в состоянии killable, пока не вернется его onStop () . Это влияет на то, когда onSaveInstanceState (Bundle) может быть вызван (его можно безопасно вызывать после onPause (), и позволяет и приложение безопасно ждать, пока onStop () сохранит постоянное состояние.


Killable

Обратите внимание на столбец «Killable» в приведенной выше таблице – для тех методов, которые отмечены как подлежащие уничтожению, после того, как этот метод возвращает процесс, в котором эта активность может быть убита системой в любое время без выполнения другой строки исполняемого кода.

Для POST-HONEYCOMB (я не забочусь о более ранних версиях): Итак, можно ли предположить, что любое устройство Android (в том числе разные ROMS) обеспечит вызов onStop в отношении активности? И это лучшее место, где можно занять много времени на хранение приложения?

Примечание. Это очень запутанно, так как большинство ответов здесь, сайты, книги и даже онлайн-тесты для Android принимают правильный ответ, что вы должны сохранить его в onPause и NOT на onStop.

Когда сохранять данные в базе данных, onPause () или onStop ()?

Или. Они почти идентичны, особенно на Android 3.0+.

Если действие, которое захватывает передний план, является типичной полноэкранной активностью, так что более ранняя активность больше не видна, onPause() и onStop() будут вызываться быстро.

Если действие, которое захватывает передний план, будет больше похоже на диалог, где более ранняя активность все еще будет видна, onPause() будет вызываться, но не onStop() , до тех пор, пока активность больше не будет видна ( Например, теперь пользователь нажимает HOME).

Большинство приложений не обеспокоены сценарием «themed to like like dialog», и в этом случае onPause() и onStop() называются одним сразу после следующего, и вы можете развернуть свой фоновый поток, чтобы сохранить свои данные в зависимости от того, что Из них имеет смысл для вас.

Однако во многих местах документации по Android они всегда предлагают не выполнять тяжелую работу (например, запись данных в базе данных) в методе onPause (), поскольку это задерживает переход между действиями.

То же самое относится к onStop() , поскольку оба этих метода вызываются в основном потоке приложения.

Итак, можно ли предположить, что любое устройство Android (в том числе разные ROMS) обеспечит вызов onStop в отношении активности?

И onPause() и onStop() будут иметь те же характеристики с точки зрения завершения процесса. Или оба должны быть вызваны (нормальный случай), либо ни один из них не будет вызван (например, вы выходите из строя, батарея выталкивает заднюю часть телефона).

И это лучшее место, где можно занять много времени на хранение приложения?

Либо onPause() либо onStop() – прекрасные места для запуска работы, выполняемой в фоновом потоке, для сохранения ваших данных. Если вы предпочитаете делать эту работу в onStop() , вы можете это сделать. Лично я являюсь участником onPause() .

  • Если вы хотите больше безопасности, храните его в onPause .
  • Если ваши данные настолько велики, что вы должны хранить их в течение нескольких секунд, вы можете открыть фоновый Service (например, IntentService ) для сохранения.
  • Вы также можете проверить версию системы в своем коде и выбрать, когда сохранять. if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.ICE_CREAM_SANDWICH){}
  • В большинстве ситуаций это правило того, когда сохранять, не будет изменено некоторыми настраиваемыми os. Но, конечно, могут быть и другие ОС, которые, безусловно, изменили его. Поэтому самое главное в развитии Android – это то, что вам нужно знать, что на разных телефонах все может быть разным.