在后台正确处理 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 很满意。
第二个是个坏主意。没有理由删除 onTrimMemory 中的 GPS 更新,它不会使用大量 RAM。并且您想将打开和关闭更新绑定到正在使用它的上下文,而不是应用程序 - 否则您将保持它们的运行时间超过需要。
现在使用 LocationManager
已经很老了,您应该使用更简单有效的方法使用 Google Play services Location API's
你应该check out this, there is sample code also available here..
我正在创建应用程序,该应用程序必须在应用程序处于后台时通过 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 很满意。
第二个是个坏主意。没有理由删除 onTrimMemory 中的 GPS 更新,它不会使用大量 RAM。并且您想将打开和关闭更新绑定到正在使用它的上下文,而不是应用程序 - 否则您将保持它们的运行时间超过需要。
现在使用 LocationManager
已经很老了,您应该使用更简单有效的方法使用 Google Play services Location API's
你应该check out this, there is sample code also available here..