1page.title=Приостановка и возобновление операции 2page.tags=жизненный цикл операции 3helpoutsWidget=true 4 5trainingnavtop=true 6 7@jd:body 8 9<div id="tb-wrapper"> 10 <div id="tb"> 11 12 <h2>Содержание этого урока</h2> 13 <ol> 14 <li><a href="#Pause">Приостановка операции</a></li> 15 <li><a href="#Resume">Возобновление операции</a></li> 16 </ol> 17 18 <h2>См. также:</h2> 19 <ul> 20 <li><a href="{@docRoot}guide/components/activities.html">Операции</a> 21 </li> 22 </ul> 23 24<h2>Попробуйте сами</h2> 25 26<div class="download-box"> 27 <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">Загрузить демонстрацию</a> 28 <p class="filename">ActivityLifecycle.zip</p> 29</div> 30 31 </div> 32</div> 33 34<p>При обычном использовании приложения выполняемая на экране операция иногда закрывается другими 35визуальными компонентами, в результате чего операция <em>приостанавливается</em>. Например, при открытии полупрозрачной 36операции (например диалогового окна) предыдущая операция приостанавливается. Пока 37операция остается частично видимой, но не остается в фокусе, она остается на паузе.</p> 38 39<p>Однако когда операция полностью закрывается и становится невидимой, она <em>останавливается</em> (об этом будет рассказано 40на следующем уроке).</p> 41 42<p>Когда операция приостанавливается, система вызывает метод {@link 43android.app.Activity#onPause onPause()} на {@link android.app.Activity}, что позволяет 44остановить текущие действия, которые не должны продолжаться во время паузы (например воспроизведение видео), или сохранять 45любую информацию, которая должна постоянно сохраняться в случае выхода пользователя из приложения. Если 46пользователь возвращается к операции после паузы, система возобновляет ее и вызывает метод 47{@link android.app.Activity#onResume onResume()}.</p> 48 49<p class="note"><strong>Примечание.</strong> Когда операция получает вызов {@link 50android.app.Activity#onPause()}, это может указывать, что операция будет приостановлена совсем ненадолго 51и пользователь сможет к ней вернуться. Однако обычно это является первым признаком 52выхода пользователя из операции.</p> 53 54<img src="{@docRoot}images/training/basics/basic-lifecycle-paused.png" /> 55<p class="img-caption"><strong>Рисунок 1</strong>. Когда полупрозрачная операция закрывает 56вашу операцию, система вызывает {@link android.app.Activity#onPause onPause()} и операция 57переходит в состояние паузы (1). Если пользователь возвращается к операции, находящейся в состоянии паузы, 58система вызывает {@link android.app.Activity#onResume onResume()} (2).</p> 59 60 61<h2 id="Pause">Приостановка операции</h2> 62 63<p>Когда система вызывает {@link android.app.Activity#onPause()} для операции, это 64технически означает, что операция остается частично видимой. Однако чаще всего это означает, что 65пользователь покидает операцию, и вскоре она войдет в состояние остановки. Обратный вызов 66 {@link android.app.Activity#onPause()} обычно следует использовать для следующих целей:</p> 67 68<ul> 69 <li>Остановка анимации или других текущих действий, которые могут потреблять ресурсы процессора.</li> 70 <li>Запись несохраненных изменений, если пользователи ожидают сохранения таких изменений 71при выходе (например черновиков электронных писем).</li> 72 <li>Высвобождение ресурсов системы, например ресиверов, интерфейсов сенсоров (например 73GPS) или других ресурсов, влияющих на время работы аккумулятора во время паузы и не 74требующихся пользователю.</li> 75</ul> 76 77<p>Например, если ваше приложение использует {@link android.hardware.Camera}, метод 78{@link android.app.Activity#onPause()} подойдет для его освобождения.</p> 79 80<pre> 81@Override 82public void onPause() { 83 super.onPause(); // Always call the superclass method first 84 85 // Release the Camera because we don't need it when paused 86 // and other activities might need to use it. 87 if (mCamera != null) { 88 mCamera.release() 89 mCamera = null; 90 } 91} 92</pre> 93 94<p>Обычно <strong>не</strong> следует использовать {@link android.app.Activity#onPause()} для сохранения 95пользовательских изменений (например введенной в форму личной информации) в постоянном хранилище. Изменения 96пользователя нужно сохранять в постоянном хранилище {@link android.app.Activity#onPause()} 97только в тех случаях, когда пользователи ожидают автоматического сохранения изменений (например при составлении черновика электронного письма). 98Однако в состоянии {@link 99android.app.Activity#onPause()} следует избегать операций с высокой нагрузкой на процессор, например выполнения записи в базу данных, поскольку это может замедлить видимый 100переход к следующей операции (вместо этого следует выполнять операции завершения работы с высокой нагрузкой при 101{@link android.app.Activity#onStop onStop()}).</p> 102 103<p>Количество операций, выполняемых с помощью метода {@link android.app.Activity#onPause 104onPause()}, должно быть не очень большим, чтобы пользователь мог быстро переключаться на следующую 105задачу при фактической остановке вашей операции.</p> 106 107<p class="note"><strong>Примечание.</strong> При приостановке операции экземпляр {@link 108android.app.Activity} остается в памяти и заново вызывается при возобновлении операции. 109Не нужно заново инициализировать компоненты, созданные с использованием любого из методов обратного вызова для возобновления 110операции.</p> 111 112 113 114<h2 id="Resume">Возобновление операции</h2> 115 116<p>Когда пользователь возобновляет операцию после паузы, система вызывает метод {@link 117android.app.Activity#onResume()}.</p> 118 119<p>Учтите, что система вызывает этот метод каждый раз, когда ваша операция выполняется на экране, 120в том числе и при первом ее запуске. В связи с этим, нужно реализовать метод {@link 121android.app.Activity#onResume()} для инициализации компонентов, освобождаемых в состоянии {@link 122android.app.Activity#onPause()}, и выполнения других операций инициализации, которые должны происходить каждый раз при возобновлении операции 123(например при запуске анимированных элементов и компонентов, которые используются 124только когда пользователь следит за операцией на экране).</p> 125 126<p>Следующий пример {@link android.app.Activity#onResume()} дополняет 127пример {@link android.app.Activity#onPause()} выше. В нем инициализируется камера, 128которая освобождается на время приостановки операции.</p> 129 130<pre> 131@Override 132public void onResume() { 133 super.onResume(); // Always call the superclass method first 134 135 // Get the Camera instance as the activity achieves full user focus 136 if (mCamera == null) { 137 initializeCamera(); // Local method to handle camera init 138 } 139} 140</pre> 141 142 143 144 145 146 147 148