Android-GPS位置更新-需要取消TimerTask



我要做的事情:

1) 每x分钟更新一次用户的位置信息

2) 使用计时器和TimerTask调用记录最新位置信息的web服务

发生了什么:

1) TimerTask已创建

2) 如果用户的手机处于休眠状态,则对网络服务的呼叫不起作用

3) TimerTask似乎存储在队列中

4) 当用户的手机唤醒时,所有排队的TimerTask都会立即执行,从而导致针对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)
    {

    }

网络连接和提供商已启用检查显然都返回"true",因为TimerTask不会被取消,它只是被排队,直到用户的手机唤醒。

如果已经过了一段时间而web服务没有响应,我如何取消TimerTask?我在TimerTask上找不到某种"setTimeout"方法。

不要使用TimerTask,使用LocationManager.requestLocationUpdates()。这与TimerTask不同,它大大简化了代码。如果用户位置不变,您还可以获得避免工作的额外好处。

如果您需要快速更新,请使用WakeLock来防止设备关闭CPU。有关详细信息,请参见此处:http://developer.android.com/reference/android/os/PowerManager.html

如果您不需要快速更新(比如每隔一分钟使用一次AlarmManager)。如果报警被触发,请请求位置更新,发送您的数据并设置下一个报警:http://developer.android.com/reference/android/app/AlarmManager.html

相关内容

  • 没有找到相关文章

最新更新