summaryrefslogtreecommitdiffstats
path: root/docs/html-intl/intl/ru/training/basics/activity-lifecycle/pausing.jd
blob: c4837809acf227b549d5c43283c10d9c0f2d063c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
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>
&#64;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>
&#64;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>