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