2013-02-18 3 views
7

У меня есть путаница относительно того, что должно быть в , onStop и onSaveInstanceState. Например, Android документы говорят, что Для -android - данные хранятся в onPause, onStop или onSaveInstanceState

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

Для onStop -

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

Для onSaveInstanceState

вашей деятельности может иметь больше информации о состоянии, которые вы хотели бы восстановить, такие как переменные, которые отслеживают прогресс пользователя в деятельности.

Не правда ли, что эти три вещи в основном указывают на сохранение информации как формы или электронной почты? Тогда в каком методе он должен быть сохранен?

ответ

6

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

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

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

+0

'onStop()' гарантированно будет вызываться с Honeycomb (3.0), на который приходится 96,8% устройств Android с января 2016 года. Поэтому я предпочитаю использовать 'onStop()' over' onPause() 'для сохранения данных Теперь. –

+0

@ VickyChijwani С точки зрения программного обеспечения _preferring_ 'onStop()' over' onPause() 'неприемлемо, если вы явно не указали в Android 3.0 явно в метаданных вашего приложения (о котором вы не упоминаете). –

+0

Правильно, я делаю свои приложения для Android 3.0 и более поздних версий, должен был упомянуть об этом.Другая (спорная) причина, по которой я предпочитаю 'onStop()', из-за этой строки в ['onPause()' docs] (http://developer.android.com/reference/android/app/Activity.html#onPause % 28% 29): «Когда действие B запускается перед активностью A, ... B не будет создан до тех пор, пока не вернется функция' onPause() ', поэтому не забудьте сделать что-нибудь длинное здесь." Конечно, документы жизненного цикла в целом все еще довольно запутанны, поэтому это не является окончательным. –

2

Для тех, кто прибывает сюда или после 2016 года, обратите внимание, что ответ @Class Stacker довольно устарел на этом этапе. В частности, onStop() гарантированно будет называться так Android 3.0 (Honeycomb), на долю которого приходится 96.8% of Android devices по состоянию на январь 2016 года

Смотрите документацию жизненный цикл здесь: http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle (Ctrl + F для «не в состоянии Killable»)

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

+0

Просто, чтобы сделать это снова ясно (также указано выше), сам процент не является достаточной точкой. Приложение, которое не адресует постоянство в 'onPause()', должно строго ограничиваться Android 3 и выше. –

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