| page.title=Приостановка и возобновление операции |
| page.tags=жизненный цикл операции |
| helpoutsWidget=true |
| |
| trainingnavtop=true |
| |
| @jd:body |
| |
| <div id="tb-wrapper"> |
| <div id="tb"> |
| |
| <h2>Содержание этого урока</h2> |
| <ol> |
| <li><a href="#Pause">Приостановка операции</a></li> |
| <li><a href="#Resume">Возобновление операции</a></li> |
| </ol> |
| |
| <h2>См. также:</h2> |
| <ul> |
| <li><a href="{@docRoot}guide/components/activities.html">Операции</a> |
| </li> |
| </ul> |
| |
| <h2>Попробуйте сами</h2> |
| |
| <div class="download-box"> |
| <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">Загрузить демонстрацию</a> |
| <p class="filename">ActivityLifecycle.zip</p> |
| </div> |
| |
| </div> |
| </div> |
| |
| <p>При обычном использовании приложения выполняемая на экране операция иногда закрывается другими |
| визуальными компонентами, в результате чего операция <em>приостанавливается</em>. Например, при открытии полупрозрачной |
| операции (например диалогового окна) предыдущая операция приостанавливается. Пока |
| операция остается частично видимой, но не остается в фокусе, она остается на паузе.</p> |
| |
| <p>Однако когда операция полностью закрывается и становится невидимой, она <em>останавливается</em> (об этом будет рассказано |
| на следующем уроке).</p> |
| |
| <p>Когда операция приостанавливается, система вызывает метод {@link |
| android.app.Activity#onPause onPause()} на {@link android.app.Activity}, что позволяет |
| остановить текущие действия, которые не должны продолжаться во время паузы (например воспроизведение видео), или сохранять |
| любую информацию, которая должна постоянно сохраняться в случае выхода пользователя из приложения. Если |
| пользователь возвращается к операции после паузы, система возобновляет ее и вызывает метод |
| {@link android.app.Activity#onResume onResume()}.</p> |
| |
| <p class="note"><strong>Примечание.</strong> Когда операция получает вызов {@link |
| android.app.Activity#onPause()}, это может указывать, что операция будет приостановлена совсем ненадолго |
| и пользователь сможет к ней вернуться. Однако обычно это является первым признаком |
| выхода пользователя из операции.</p> |
| |
| <img src="{@docRoot}images/training/basics/basic-lifecycle-paused.png" /> |
| <p class="img-caption"><strong>Рисунок 1</strong>. Когда полупрозрачная операция закрывает |
| вашу операцию, система вызывает {@link android.app.Activity#onPause onPause()} и операция |
| переходит в состояние паузы (1). Если пользователь возвращается к операции, находящейся в состоянии паузы, |
| система вызывает {@link android.app.Activity#onResume onResume()} (2).</p> |
| |
| |
| <h2 id="Pause">Приостановка операции</h2> |
| |
| <p>Когда система вызывает {@link android.app.Activity#onPause()} для операции, это |
| технически означает, что операция остается частично видимой. Однако чаще всего это означает, что |
| пользователь покидает операцию, и вскоре она войдет в состояние остановки. Обратный вызов |
| {@link android.app.Activity#onPause()} обычно следует использовать для следующих целей:</p> |
| |
| <ul> |
| <li>Остановка анимации или других текущих действий, которые могут потреблять ресурсы процессора.</li> |
| <li>Запись несохраненных изменений, если пользователи ожидают сохранения таких изменений |
| при выходе (например черновиков электронных писем).</li> |
| <li>Высвобождение ресурсов системы, например ресиверов, интерфейсов сенсоров (например |
| GPS) или других ресурсов, влияющих на время работы аккумулятора во время паузы и не |
| требующихся пользователю.</li> |
| </ul> |
| |
| <p>Например, если ваше приложение использует {@link android.hardware.Camera}, метод |
| {@link android.app.Activity#onPause()} подойдет для его освобождения.</p> |
| |
| <pre> |
| @Override |
| public void onPause() { |
| super.onPause(); // Always call the superclass method first |
| |
| // Release the Camera because we don't need it when paused |
| // and other activities might need to use it. |
| if (mCamera != null) { |
| mCamera.release() |
| mCamera = null; |
| } |
| } |
| </pre> |
| |
| <p>Обычно <strong>не</strong> следует использовать {@link android.app.Activity#onPause()} для сохранения |
| пользовательских изменений (например введенной в форму личной информации) в постоянном хранилище. Изменения |
| пользователя нужно сохранять в постоянном хранилище {@link android.app.Activity#onPause()} |
| только в тех случаях, когда пользователи ожидают автоматического сохранения изменений (например при составлении черновика электронного письма). |
| Однако в состоянии {@link |
| android.app.Activity#onPause()} следует избегать операций с высокой нагрузкой на процессор, например выполнения записи в базу данных, поскольку это может замедлить видимый |
| переход к следующей операции (вместо этого следует выполнять операции завершения работы с высокой нагрузкой при |
| {@link android.app.Activity#onStop onStop()}).</p> |
| |
| <p>Количество операций, выполняемых с помощью метода {@link android.app.Activity#onPause |
| onPause()}, должно быть не очень большим, чтобы пользователь мог быстро переключаться на следующую |
| задачу при фактической остановке вашей операции.</p> |
| |
| <p class="note"><strong>Примечание.</strong> При приостановке операции экземпляр {@link |
| android.app.Activity} остается в памяти и заново вызывается при возобновлении операции. |
| Не нужно заново инициализировать компоненты, созданные с использованием любого из методов обратного вызова для возобновления |
| операции.</p> |
| |
| |
| |
| <h2 id="Resume">Возобновление операции</h2> |
| |
| <p>Когда пользователь возобновляет операцию после паузы, система вызывает метод {@link |
| android.app.Activity#onResume()}.</p> |
| |
| <p>Учтите, что система вызывает этот метод каждый раз, когда ваша операция выполняется на экране, |
| в том числе и при первом ее запуске. В связи с этим, нужно реализовать метод {@link |
| android.app.Activity#onResume()} для инициализации компонентов, освобождаемых в состоянии {@link |
| android.app.Activity#onPause()}, и выполнения других операций инициализации, которые должны происходить каждый раз при возобновлении операции |
| (например при запуске анимированных элементов и компонентов, которые используются |
| только когда пользователь следит за операцией на экране).</p> |
| |
| <p>Следующий пример {@link android.app.Activity#onResume()} дополняет |
| пример {@link android.app.Activity#onPause()} выше. В нем инициализируется камера, |
| которая освобождается на время приостановки операции.</p> |
| |
| <pre> |
| @Override |
| public void onResume() { |
| super.onResume(); // Always call the superclass method first |
| |
| // Get the Camera instance as the activity achieves full user focus |
| if (mCamera == null) { |
| initializeCamera(); // Local method to handle camera init |
| } |
| } |
| </pre> |
| |
| |
| |
| |
| |
| |
| |