summaryrefslogtreecommitdiffstats
path: root/docs/html-intl/intl/ru/training/monitoring-device-state/manifest-receivers.jd
blob: 724ee93e282231d5960116ee5cd2d491a7b5ba70 (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
page.title=Manipulating Broadcast Receivers On Demand
parent.title=Optimizing Battery Life
parent.link=index.html

trainingnavtop=true

previous.title=Determining and Monitoring the Connectivity Status
previous.link=connectivity-monitoring.html

@jd:body

<div id="tb-wrapper"> 
<div id="tb">

<h2>Содержание урока</h2>
<ol>
  <li><a href="#ToggleReceivers">Включение, отключение и каскадирование приемников изменения состояния для повышения эффективности</a></li>
</ol>


<h2>Дополнительные материалы</h2>
<ul>
  <li><a href="{@docRoot}guide/components/intents-filters.html">Намерения и фильтры намерений</a>
</ul>

</div> 
</div>

<p>Самый простой способ отслеживать изменения состояния устройства&nbsp;– создать приемники {@link android.content.BroadcastReceiver} для каждого отслеживаемого состояния и зарегистрировать их в манифесте приложения. Затем в каждом из этих приемников можно переопределять график повторяющихся оповещений в зависимости от текущего состояния устройства.</p>

<p>Этот способ имеет недостатки: приложение активирует устройство при каждом запуске любого из этих приемников, что далеко не всегда оправданно.</p>

<p>Оптимальный вариант&nbsp;– включать и выключать приемники широковещательных намерений во время работы приложения. Это позволяет использовать приемники, объявленные в манифесте, как пассивные оповещения, которые инициируются системными событиями только в случае необходимости.</p>
 

<h2 id="ToggleReceivers">Включение, отключение и каскадирование приемников изменения состояния для повышения эффективности </h2> 
 
<p>{@link android.content.pm.PackageManager} позволяет включать и выключать любые компоненты, определенные в манифесте, в том числе все приемники широковещательных намерений:</p>

<pre>ComponentName receiver = new ComponentName(context, myReceiver.class);

PackageManager pm = context.getPackageManager();

pm.setComponentEnabledSetting(receiver,
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP)</pre>

<p>При разрыве соединения этот метод позволяет выключить все приемники, кроме приемника изменения состояния подключения. И наоборот, когда подключение уже установлено, отслеживать изменения его состояния не требуется. Достаточно проверить наличие подключения к Интернету непосредственно перед обновлением или изменением графика оповещений о регулярном обновлении.</p>

<p>Точно так же можно отложить загрузку, для выполнения которой требуется более высокая пропускная способность. Просто включите приемник широковещательных намерений, который будет отслеживать изменения возможности подключения и инициировать загрузку только после подключения к сети Wi-Fi.</p>