Skip to content

Commit 35071df

Browse files
author
VegeChou
committed
Add documents dir
1 parent 0c8693f commit 35071df

File tree

4 files changed

+418
-0
lines changed

4 files changed

+418
-0
lines changed

Diff for: Documents/BatteryManager.md

+195
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
# Android SDK 省电模式及功耗
2+
3+
> 作者:Sensoro
4+
>
5+
> 版本:v1.0
6+
>
7+
> 日期:2015年05月15日
8+
9+
10+
11+
## 为什么需要省电模式
12+
13+
iBeacon 工作原理是通过 2.4GHz 信号,周期性发射广播数据。Android 设备若要接收 iBeacon 数据,就需要不停的进行蓝牙扫描操作。对于 Android 设备而言,蓝牙扫描的操作是很相对比较耗电的。如果持续对 iBeacon 广播进行监听,会加快电池电量的消耗。对于部分用户来说,一个 APP 十分耗电是不可以接受的。
14+
15+
## 省电模式工作原理
16+
17+
如果当 APP 切换到后台时,说明用户对于该 APP 的需求变的很低,但为了达到某些用户体验的效果,又不能停止对 iBeacon 的数据监测。因此,可以适当延长 Android 设备的蓝牙扫描间隔,既能满足 APP 需求,又能达到省电的效果。
18+
19+
## 省电模式的使用
20+
21+
### 启用省电模式
22+
23+
在 Android 代码的 Application 中,实现 BackgroundPowerSaver 对象,即可开启省电模式。
24+
25+
```
26+
import com.sensoro.cloud.BackgroundPowerSaver;
27+
28+
public class MyApplication extends Application {
29+
private BackgroundPowerSaver backgroundPowerSaver;
30+
31+
public void onCreate() {
32+
super.onCreate();
33+
backgroundPowerSaver = new BackgroundPowerSaver(this);
34+
}
35+
}
36+
```
37+
38+
### 设置省电模式参数
39+
40+
用户可以根据自己的需求,调整前台和后台的扫描时间和扫描间隔,以达到自己省电的需求。示例代码如下:
41+
42+
```
43+
// set the foreground duration of the scan to be 1.1 seconds
44+
sensoroManager.setForegroundScanPeriod(1100);
45+
// set the foreground time between each scan to be 0
46+
sensoroManager.setForegroundBetweenScanPeriod(0);
47+
// set the background duration of the scan to be 5 seconds
48+
sensoroManager.setBackgroundScanPeriod(5000);
49+
// set the background time between each scan to be 30 seconds
50+
sensoroManager.setBackgroundBetweenScanPeriod(30000);
51+
```
52+
如果不进行任何设置,前台默认扫描时间为 1100 ms,前台默认扫描间隔为 0 ms;
53+
后台默认扫描时间为 5000 ms,后台默认扫描间隔为 30000 ms。
54+
55+
省电模式参数与功耗的关系:扫描时间越长,功耗越高;扫描间隔越短,功耗越高。
56+
57+
## 省电模式实测效果
58+
59+
### 测试环境
60+
61+
- 电源:安泰信 APS3005D 稳压电源
62+
- 万用表:VICTOR 86D(带 USB 输出)
63+
- 手机:Nexus 5,三星 S4
64+
65+
### 测试方法
66+
67+
1. 将电源、万用表、手机串联
68+
2. 设置稳压电源为 4.5V。手机默认电压为 3.8V,因为万用表有内阻,所以需要适当将电源调高,否则设备无法启动
69+
3. 将万用表连接至 PC,安装DMM Data Precessor [http://www.china-victor.com/Files/Download/setup_86b_multi.rar](http://www.china-victor.com/Files/Download/setup_86b_multi.rar),方便将测试数据导出,计算结果
70+
4. 将手机恢复出产设置,关闭数据连接(wifi,2G,3G),手机屏幕设置常亮
71+
5. 测试 SDK 未启动功耗
72+
6. 测试 SDK 启动功耗
73+
7. 计算差值则为 SDK 实际功耗
74+
75+
76+
![](https://raw.githubusercontent.com/Sensoro/Sensoro.github.io/master/download/sdk/android/res/images/battery-manager-1.png)
77+
78+
79+
### 测试结果
80+
81+
82+
在 SDK 默认参数下,Nexus 5 和 S4 的功耗表现如下表:
83+
84+
| | 前台静态功耗 | 前台扫描功耗 | 后台静态功耗 | 后台扫描功耗 |
85+
| :--------------: |:------------: | :------: | :------:| :------:|
86+
| 三星 S4 (4.4.2) | 181 mA | 315 mA | 174 mA | 193 mA |
87+
| Nexus 5(5.1) | 152 mA | 268 mA | 155 mA | 174 mA|
88+
89+
- 理论值</br>
90+
SDK 前台扫描为扫描 1100 ms,间隔 0ms,相当于前台不停扫描;后台扫描为扫描 5000 ms,间隔 30000 ms。以 35000 ms 为一个周期进行计算,理论上节省电量为 (35000 - 5000)/35000 = 85.71%。
91+
92+
- 实测值</br>
93+
在三星 S4 中,SDK 在前台的功耗为 134 mA,后台功耗为 19 mA,实际节省电量为 (134 - 19)/134 = 85.82%。</br>
94+
在 Nexus 5 中,SDK 在前台的功耗为 116 mA,后台功耗为 19 mA,实际节省电量为 (116 - 19)/116 = 83.62%。
95+
96+
根据测试结果分析,SDK 实际功耗与理论值是基本相同的。使用 SDK 默认设置,当 APP 进入后台模式之后,整体功耗会下降约 80%。开发者可以根据自己的需求,适当调整前台和后台的扫描参数。
97+
98+
<font color="red">
99+
*说明:如果 SDK 开启后台唤醒模式,整体功耗在原有基础上将提高大约 20 mA。*
100+
</font>
101+
102+
### 结果验证
103+
104+
我们最后使用了示波器对手机实际功耗进行抓图,以验证测试结果的正确性。
105+
106+
由于后台模式默认周期较长,示波器波形表现不明显,很难估算结果,因此仅对前台模式的结果进行验证。
107+
108+
#### Nexus 5
109+
110+
![](https://raw.githubusercontent.com/Sensoro/Sensoro.github.io/master/download/sdk/android/res/images/battery-manager-2.png)
111+
112+
根据上述波形,以第二个波峰估算功耗:((500ms * 30mV/2 + (500ms * 10mV))/1000ms)/0.1Ω = 125 mA
113+
114+
计算结果与实测结果在误差为 9mA。
115+
116+
#### 三星 S4
117+
118+
![](https://raw.githubusercontent.com/Sensoro/Sensoro.github.io/master/download/sdk/android/res/images/battery-manager-3.png)
119+
120+
根据上述波形,功耗估算结果:(((200 * 60mV)/2 + (800 * 10mV))/1000ms)/0.1Ω = 140 mA
121+
122+
123+
计算结果与实测结果在误差为 6mA。
124+
125+
## 省电模式的影响
126+
127+
需要注意的是,不能仅为了降低功耗,而无限制的延长扫描间隔,或者缩短扫描时间。
128+
129+
如果设置扫描间隔越长,那么发现 iBeacon 的时间也越长;如果扫描时间越短,那么就越不容发现 iBeacon。
130+
131+
因此我们建议的扫描时间不低于 iBeacon 广播时间间隔,目前大部分 iBeacon 的广播间隔是从 10 ms ~ 1000 ms 不等。
132+
133+
另外,影响 iBeacon 被发现的因素还与周围环境有关。周边的 iBeacon 越多,目标 iBeacon 相对越不容易被发现。
134+
135+
下面是根据周边 iBeacon 数量不同,发现目标 iBeacon 所需要的时间测试结果:
136+
137+
- iBeacon 参数:云子出厂默认配置(功率: -8 dbm,频率: 417.5 ms)
138+
- 省电模式参数:SDK 默认配置(前台扫描时间:1100 ms,前台扫描间隔:0 ms,后台扫描时间:5000 ms,后台扫描间隔:30000 ms)
139+
- 测试距离:1~2 m
140+
141+
<html>
142+
<body>
143+
<table border="1">
144+
<tr>
145+
<th rowspan="2"></th>
146+
<th colspan="5">前台扫描平均时间(ms)</th>
147+
<th colspan="5">后台扫描平均时间(ms)</th>
148+
</tr>
149+
<tr>
150+
<td>1</td>
151+
<td>2</td>
152+
<td>5</td>
153+
<td>10</td>
154+
<td>20</td>
155+
<td>1</td>
156+
<td>2</td>
157+
<td>5</td>
158+
<td>10</td>
159+
<td>20</td>
160+
</tr>
161+
<tr>
162+
<td>Nexus 5 (5.1)</td>
163+
<td>1286</td>
164+
<td>1306.5</td>
165+
<td>2509.8</td>
166+
<td>4071.2</td>
167+
<td>4268.62</td>
168+
<td>1996</td>
169+
<td>1591.5</td>
170+
<td>4121.75</td>
171+
<td>31505.7</td>
172+
<td>36519.5</td>
173+
</tr>
174+
<tr>
175+
<td>三星 S4 (4.4.2)</td>
176+
<td>1670.5</td>
177+
<td>1867.33</td>
178+
<td>2762.2</td>
179+
<td>4113</td>
180+
<td>4782.75</td>
181+
<td>1867.33</td>
182+
<td>1800.57</td>
183+
<td>8722.74</td>
184+
<td>37243.8</td>
185+
<td>36702.5</td>
186+
</tr>
187+
</table>
188+
<body>
189+
</html>
190+
191+
根据测试结果看出,前台扫描最多只需要 5 个扫描周期,就可以扫描到 20 个 iBeacon;后台扫描最多只需要 2 个周期,就可以扫描到 20 个 iBeacon。
192+
193+
194+
195+

Diff for: Documents/README.md

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Sensoro SDK Documents
2+
3+
> 作者:Sensoro
4+
>
5+
> 版本:v1.0
6+
>
7+
> 时间:2015年05月18日
8+
9+
该文档主要介绍了与 Sensoro SDK 相关的参考文档。
10+
11+
- BatteryManager.md
12+
13+
详细讲解了 Sensoro SDK 后台工作模式及原理,以及在后台模式下 SDK 的功耗表现,同时给出一些实测结果供用户参考。
14+

0 commit comments

Comments
 (0)