2

我需要发送一系列 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(); 
    }
  }

是否可以采取任何措施来提高该问题的性能?

4

2 回答 2

3

这是来自 Google I/O 的一段关于这个主题的视频:

谷歌 I/O

简而言之:

每个请求都会将无线电从待机状态唤醒并将其转为全功率。发送请求后,它会保持这种状态一段时间,然后在低功耗状态下再停留一段时间,最后再次进入待机状态。

如果您执行一系列小请求,每个请求都会触发无线电全功率,如果请求之间的间隔太短,它将永远不会进入待机模式。

但是,如果您累积您的请求(如果您的应用确实不需要如此频繁地显示一些远程数据)并将它们作为批次发送但不那么频繁,它将触发更少的无线电并节省电池寿命。

于 2012-07-18T13:09:41.753 回答
1

不知道你的问题是什么,但你以某种方式回答了自己 - 更多的活动比更少的活动更消耗电池。这太明显了,所以假设您想减少电池使用量,那么特殊策略是……嗯,最终会减少您的活动。对您的 HTTP 调用进行分组,重新设计服务器端以提高效率,批量执行调用以使用无线电的完整电源状态。

于 2012-07-18T13:11:56.620 回答