如何每5秒钟继续请求一个页面而不是杀死电池?

时间:2011-07-27 16:00:45

标签: android http request httpclient sync

我正在开发的我的Android应用程序需要每5秒在我的服务器上请求一个页面,但我担心这将是一个大电池消费者,有没有更简单的方法?我目前的方法是每5秒循环一次的服务:

protected void onHandleIntent(Intent intent) {
      while (true){

          long endTime = System.currentTimeMillis() + 5*1000;
          while (System.currentTimeMillis() < endTime) {
              synchronized (this) {
                  try {
                      wait(endTime - System.currentTimeMillis());


                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost("http://www.***.***/***/request_sms.php");
                    String HTML = "";
                    try {
                        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                        nameValuePairs.add(new BasicNameValuePair("id", "1"));
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                        HttpResponse response = httpclient.execute(httppost);
                        HTML = EntityUtils.toString(response.getEntity());
                    } catch (ClientProtocolException e) {} catch (IOException e) {} 


                        if(HTML.indexOf("[NO TEXTS]") > 0) {
                        } else {
                            Vector<String> all_sms = getBetweenAll(HTML, "<sms>", "<sms>");
                            for(int i = 0, size = all_sms.size(); i < size; i++) {
                                String from = getBetween(all_sms.get(i), "<from>", "</from>");
                                String to = getBetween(all_sms.get(i), "<to>", "</to>");
                                String msg = getBetween(all_sms.get(i), "<msg>", "</msg>");
                                String sent = getBetween(all_sms.get(i), "<sent>", "</sent>");
                                String HTML1 = "";
                                HttpClient httpclient1 = new DefaultHttpClient();
                                HttpPost httppost1 = new HttpPost("http://www.***.***/***/add_sms.php");
                                try {
                                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                                    nameValuePairs.add(new BasicNameValuePair("from", from));
                                    nameValuePairs.add(new BasicNameValuePair("to", to));
                                    nameValuePairs.add(new BasicNameValuePair("msg", msg));
                                    nameValuePairs.add(new BasicNameValuePair("sent", sent));
                                    httppost1.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                                    HttpResponse response1 = httpclient1.execute(httppost1);
                                    HTML1 = EntityUtils.toString(response1.getEntity());
                                    HN.post(new DisplayToast(HTML1)); 
                                } catch (ClientProtocolException e) {} catch (IOException e) {} 

                            }
                        }


                      } catch (Exception e) {
                  }
              }
          }

        }


  }

3 个答案:

答案 0 :(得分:3)

有没有理由需要每隔5秒检查一次?您最好让服务器将通知(通过c2dm)推送到设备,以确定何时有可用的更新。如果你不断轮询服务器,无论你如何实施它都会耗尽电池。

答案 1 :(得分:2)

我会考虑使用Android C2DM(来自Android blog)。

基本上,您将用户设备注册到服务器,并且可以设置服务器以将通知推送到用户设备。然后,您可以将客户端更改为仅在服务器通知存在新数据时发出请求。

这应该很好,因为您不需要经常提出请求。你一定会以这种方式节省电池寿命。

答案 2 :(得分:0)

对于类似聊天的功能,Smack(和Asmack变体)库非常受Android开发人员的欢迎。它使用XMPP提供聊天层。