• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&#64;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&#64;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