在后台正确处理 LocationManager.requestLocationUpdates

Proper handling LocationManager.requestLocationUpdates in background

我正在创建应用程序,该应用程序必须在应用程序处于后台时通过 GPS 获取用户的位置,我正在使用 LocationManager 进行此操作,但我开始想知道哪种方法更安全。

1) 开始侦听服务中的任何位置更改,并在 onDestroy() 中删除更新 - 但根据我的阅读,如果服务将被终止,则无法触发 onDestroy()。

2) 创建某种 GPSManager class 并在 Application class removeUpdates 中的 onDestroy() (或者可能在 onTrimMemory() )。 GPSManager 看起来像这样: public class GPSManager {

Context mContext;

LocationManager mLocationManager;

public GPSManager(Context context){
}

public void startGPSService(){
}

public void stopGPSService(){
}

LocationListener listener = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
    }

    @Override
    public void onStatusChanged(String s, int i, Bundle bundle) {

    }

    @Override
    public void onProviderEnabled(String s) {

    }

    @Override
    public void onProviderDisabled(String s) {

    }
};

}

3) 任何其他方法,比我提到的更好,我不知道。

提前致谢

如果您的服务被终止,要么调用 onDestroy 要么终止整个进程 - 在这种情况下您无需担心,OS 会将您从要通知的应用列表。所以你对#1 很满意。

第二个是个坏主意。没有理由删除 o​​nTrimMemory 中的 GPS 更新,它不会使用大量 RAM。并且您想将打开和关闭更新绑定到正在使用它的上下文,而不是应用程序 - 否则您将保持它们的运行时间超过需要。

现在使用 LocationManager 已经很老了,您应该使用更简单有效的方法使用 Google Play services Location API's

你应该check out this, there is sample code also available here..