0

*请查看以下编写的源代码行并提出建议: - *

在下面提到的代码行中,我试图每 60 秒请求一次 GPS 和网络位置。

if (gps_enabled)
{
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 0,       locationListenerGps);
}

if (network_enabled)
{
    mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 0,
                    locationListenerNetwork);
}

下面提到的是位置更改侦听器的代码:-

LocationListener locationListenerGps = new LocationListener()
{
    public void onLocationChanged(Location location)
        {
        mCurrentGpsLocation = location;

        String userCurrentGpsLocation = findUserAddress(mCurrentGpsLocation, mPreviousGpsLocation);

        mPreviousGpsLocation = location;

        for(int i = 0, size = mLocationUpdateListeners.size(); i<size; i++)
        {
            LocationUpdateListener listener = mLocationUpdateListeners.get(i);

            listener.recieveGpsNotification(userCurrentGpsLocation);
        }
    }

    public void onProviderDisabled(String provider) {
    }

    public void onProviderEnabled(String provider) {
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
};

LocationListener locationListenerNetwork = new LocationListener()
{
    public void onLocationChanged(Location location)
    {
        mCurrentNetworkLocation = location;

        String userCurrentNetworkLocation =findUserAddress(mCurrentNetworkLocation, mPreviousNetworkLocation);

        mPreviousNetworkLocation = location;

        for(int i = 0, size = mLocationUpdateListeners.size(); i<size; i++)
        {
            LocationUpdateListener listener = mLocationUpdateListeners.get(i);

            listener.recieveNetworkNotification(userCurrentNetworkLocation);
        }
        }

    public void onProviderDisabled(String provider) {
    }
    public void onProviderEnabled(String provider) {
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
};

在接收 GPS 和网络的位置更改事件时,我只需分别调用我的听众 recieveGpsNotification() 和 recieveNetworkNotification() 方法。recieveGpsNotification() 的逻辑如下:-

public void recieveGpsNotification(String gpsLocation)
{
    sendEmail();
}

**问题 :-

1) 我希望每 60 秒后调用一次 sendMail() 但我收到的通知非常频繁,在 4-5 次通知后我的应用程序崩溃了。如果您在实现逻辑中发现任何错误,请提供帮助。

2) 即使我的活动处于暂停状态或停止状态,我是否也会收到 GPS 通知,因为即使我的活动处于后台或停止状态,我也想收到通知?

附加查询:- 每当 android 框架为我们提供 GPS 位置更新时,每次通知都来自不同的线程,还是请求通知的线程?提前致谢。**

4

1 回答 1

0
  1. 尝试为每次更新添加一个最小距离。还可以考虑为您的 sendEmail() 方法将更新分组在一起
  2. 将您的位置侦听器逻辑移动到在后台运行的服务中。这将保持更新。但是,请注意 GPS 更新对电池寿命的影响很糟糕,并且用户不会乐于看到 GPS 一直试图锁定。
  3. 我相信这些更新发生在声明它们的线程上。因此,您应该将 findUserAddress() 方法和其他复杂操作移至不同的线程。
  4. 此外,您应该只使用一种方法来获取 GPS 更新。正常的用例是尝试 GPS 适配器,如果未启用或预设,则无法使用网络侦听器。由于您拥有两者,因此您将在不同的时间间隔同时获得这两个更新。
于 2013-11-13T15:11:00.507 回答