我需要发送一系列http请求:1分钟内每秒1次。 AFAIK会影响电池使用量。是否有处理此类问题的特殊策略?
UPD:我必须使用POST请求,这是我的POST请求功能:
URL url;
HttpURLConnection connection = null;
try {
//Create connection
url = new URL(targetURL);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setConnectTimeout(3000);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", "" +
Integer.toString(urlParameters.getBytes().length));
connection.setRequestProperty("Content-Language", "en-US");
if(headers != null){
for (String key : headers.keySet()) {
connection.setRequestProperty(key, headers.get(key));
}
}
connection.setUseCaches (false);
connection.setDoInput(true);
connection.setDoOutput(true);
//Send request
DataOutputStream wr = new DataOutputStream (
connection.getOutputStream ());
wr.writeBytes (urlParameters);
wr.flush ();
wr.close ();
//Get Response
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
String line;
StringBuffer response = new StringBuffer();
while((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
}
rd.close();
Log.d("response", response.toString());
return response.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if(connection != null) {
connection.disconnect();
}
}
是否可以采取任何措施来改善问题的表现;
答案 0 :(得分:3)
以下是Google I / O关于此主题的视频:
简而言之:
每个请求都会从待机状态唤醒无线电并将其转为全功率。在发送请求之后,它会保持这样的状态一段时间,然后再处于低功耗状态,然后再次进入待机状态。
如果你做了一系列小请求,每个请求都会触发无线电全功率,如果请求间隔太短,它将永远不会进入待机模式。
但是如果你积累了你的请求(如果你的应用并不是真的需要经常显示一些远程数据)并将它们作为批量发送但不经常发送它会减少收音机并节省电池寿命。
答案 1 :(得分:1)
不确定你的问题是什么,但是你以某种方式回答了自己 - 更多的活动耗尽了电池,而不是活动。这非常棒,所以假设你想减少电池使用量,那么特殊策略就是......最终减少你的活动。对您的HTTP呼叫进行分组,重新设计服务器端以提高其效率,批量执行呼叫以使用无线电的全功率状态。