我有一个应用程序,它使用JSON定期(固定时间间隔,20秒)从服务器请求数据。
我当前的实现包括在异步任务中进行循环,具有20秒的“睡眠”状态。然而,这似乎不是一个好的实施。我的问题是有更好的实施。还有一种强制方法可以强制从主线程中停止异步任务。
另一个选择是更改代码,让客户端发送一个请求,让服务器让服务器循环回答。这是一个更好的实现,谢谢你提前:)
protected String doInBackground(String... args) {
String RegistrartionID = RegisID();
while (true){
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("Start_Term", args[0]));
params.add(new BasicNameValuePair("Dest_Term", args[1]));
params.add(new BasicNameValuePair("RegistrartionID",
RegistrartionID));
Log.i("Start_Term", args[0]);
Log.i("Dest_Term", args[1]);
Log.i("RegistrartionID", RegistrartionID);
JSONObject json = jsonParser.makeHttpRequest(
URL_SEND_CHOSEN_TERMINALS, "POST", params);
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
答案 0 :(得分:0)
正如你所说,这不是一个好的实现。与流行的观点相反,AsyncTask
不适用于长期/未确定的时间过程,它适用于短期任务,因此可以在之后退出并结束。
出于您的目的,我建议您使用Service
。基本上是因为你有优势,你可以启动它并在你定义它的Activity中停止它。您可能会看到其文档here。 this也可以提供帮助,这是一个非常好的例子。
答案 1 :(得分:0)
我建议您使用执行AsyncTask的服务并每20秒循环一次,您可以使用AlarmManager