我正在尝试做的事情:
1) 每 x 分钟更新一次用户的位置信息
2) 使用计时器和 TimerTask 调用记录最新位置信息的网络服务
发生了什么:
1) TimerTask 被创建
2) 如果用户的手机处于休眠/睡眠状态,则无法调用 Web 服务
3) TimerTask 似乎被存储在队列中
4) 当用户的手机唤醒时,所有排队的 TimerTasks 立即执行,导致针对 web 服务的多次不需要的位置更新
这是代码片段:
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try
{
//validate that the device has an active & working connection
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = connMgr.getActiveNetworkInfo();
//validate the the device network provider is enabled
if ((eview_locationManagerwifi
.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) && (activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED))
{
UpdateSubscriberLocation(); // call the web service to report location data
}
else
{
this.cancel();
}
}
catch (Exception e)
{
}
网络连接和启用提供程序的检查显然都返回“真”,因为 TimerTask 没有被取消,它只是排队等待用户的手机唤醒。
如果在一段时间内没有来自 Web 服务的响应,我如何取消 TimerTask?我无法在 TimerTask 上找到一种“setTimeout”方法。