我从我的服务中调用了GetXMLTask,它将每隔1秒重复调用一次从IP地址(MyIP)获取数据。
MyService.java
public class MyService extends Service {
public int onStartCommand(Intent intent, int flags, int startId) {
if (GlobalFunctions.isInternetAvailable(MyService.this)
|| GlobalFunctions.isWifi(MyService.this)) {
MyTimerTask myTask = new MyTimerTask();
Timer myTimer = new Timer();
myTimer.schedule(myTask, 1000, 1000);
} else {
Toast.makeText(MyService.this, "No Internet Connection", 1000).show();
}
return Service.START_STICKY;
}
class MyTimerTask extends TimerTask {
public void run() {
GetXMLTask task = new GetXMLTask();
task.execute(new String[] { MyIP });
}
}
}
asynctask用于GetXMLTask.java。
public class GetXMLTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
try {
String output = null;
for (String url : urls) {
output = getOutputFromUrl(url);
}
return output;
} catch (Exception e) {
return null;
}
}
}
现在当应用程序运行时,我已经更改了ip地址,但是&#34; urls&#34;仍然显示以前的IP地址(请参阅eclipse调试模式中的数据),然后显示&#34; urls&#34;将在很长一段时间后更新。
我可以知道我该怎么做才能让asynctask中的网址直接占用最新的ip地址而不会有太长的延迟。
非常感谢你
2014年4月24日更新:
我对doinBackground代码进行了更改,但从IP地址收到的数据仍然不是更新的数据。
protected String doInBackground(String... urls) {
try {
String output = null;
String[] newurl = {GlobalVariables.Global_URL + "/status.xml"};
for (String url : newurl) {
output = getOutputFromUrl(url);
}
return output;
} catch (Exception e) {
return null;
}
}
有什么想法吗?谢谢
2014年4月25日更新:
我已经调试了代码,并注意到当IP地址发生变化时,asynctask似乎已经冻结了相当长的时间。我把断点放在了doinbackground中,它并没有进入。 任何的想法?谢谢
答案 0 :(得分:0)
doInBackground中的for循环是按顺序处理URL。你可能需要在for循环中检查ip的变化,如果ip已经改变了需要的话(例如相应地更新URL)。