Java 如何定期检查解析服务器上的更新?

Java 如何定期检查解析服务器上的更新?,java,android,multithreading,android-asynctask,Java,Android,Multithreading,Android Asynctask,地狱社区。我对安卓相当陌生,在网络和后端方面可能是最大的noob。 现在我有以下问题 我正在构建一个简单的聊天应用程序,希望我的应用程序能够检查解析服务器上的特定消息解析对象 获取对象、处理对象和删除对象都很好。 如果我只做一次 这就是我从云端获取消息并将其添加到我的应用程序布局的方式 ParseQuery<ParseObject> query = ParseQuery.getQuery("message"); query.whereEqualTo("reci

地狱社区。我对安卓相当陌生,在网络和后端方面可能是最大的noob。 现在我有以下问题

我正在构建一个简单的聊天应用程序,希望我的应用程序能够检查解析服务器上的特定消息解析对象

获取对象、处理对象和删除对象都很好。 如果我只做一次

这就是我从云端获取消息并将其添加到我的应用程序布局的方式

ParseQuery<ParseObject> query = ParseQuery.getQuery("message");
            query.whereEqualTo("recipient", getRemote_id());

            query.findInBackground(new FindCallback<ParseObject>() {
              public void done(List<ParseObject> messages, ParseException e) {
                 if(messages != null){
                     Iterator itr = messages.iterator();
                      while(itr.hasNext()){
                          ParseObject message = (ParseObject)itr.next();

                         addMessageToLayout(message.getString("text"), "in", "new", "");  
                         try {
                            message.delete();
                        } catch (ParseException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                      } 
                 }

              }
            }); 
我发现只有在调用onStop()时尝试关闭线程或关闭while循环时,我才会收到NetworkOnMainThreadException。如果我让线程做自己的事情,这意味着在任何时候都不输入任何代码来阻止它,那么我的应用程序工作正常。 我怎样才能克服这个问题

我知道这有点长了。但也许有人也有同样的问题,可以在这里获得一些信息


已经谢谢你的帮助了=)

不要这样做。别这样

考虑一下:您正在调用一个
AsyncTask
来定期检查是否存在某些内容。现在,这将是相当昂贵的。如果没有这条信息,想想你浪费的电池和网络资源。因此,你浪费了很多资源。这样做不是个好主意。你浪费了用户的资源。此外,您还需要在后台运行服务,因为您的应用程序不会一直运行

解决这个问题的一个好方法是使用。因此,谷歌云消息的作用是每次有更新时都“ping”一个设备。这让你的生活更轻松,因为你只需要检查你的应用程序是否收到了其中一个ping,这也节省了电池和网络资源

如果您在服务器端应用程序中使用PHP,则可以使用以下内容开始使用GCM和PHP:

也应该有助于实施它


通过使用GCM,还可以避免无限循环或每x分钟检查一次更多信息。你不必检查自己是否有新的信息;它将在可用时ping您。

解决了我在查看此问题时遇到的问题。如果您不再需要帮助,请删除此问题。编辑:它仍然无法按我的预期工作。我发现只有当活动中有任何东西试图关闭检查消息的线程时,我才会收到NetworkOnMainThreadException。例如,我的while(running)循环。我通过在onStop()中将running设置为false来关闭它。
public void startLookingForMessages(){

        final Handler handler = new Handler();
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {       
             @Override
             public void run() {

               handler.post(new Runnable() {
                  public void run() {  
                     new GetMessagesTask().execute();

                  }
                });
              }
        };
        timer.schedule(task, 0, 1000);

    }