这是一个与 LocationManager 相关的效率问题(更普遍的是,在 Android 中管理内存与 CPU 使用情况)。假设我有一个长期运行的服务,它希望每 60 秒使用一次 LocationManager 的 getLastKnownLocation 方法来更新位置。该服务使用一个 TimerTask 和一个 Time 重复固定延迟执行。是创建一个实例字段 mLocationManager 并在服务的生命周期内保留它更好,还是在 TimerTask 的每次执行时实例化 LocationManager 更好,据说 VM 只会在需要时保留它?在代码中:
public class ProximityService extends Service {
private LocationManager mLocationManager;
@Override
public void onCreate() {
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Timer timer = new Timer();
TimerTask mGetLastKnownLocationTask = new GetLastKnownLocationTask();
timer.schedule(mGetLastKnownLocationTask, 0, 60000);
}
private class GetLastKnownLocationTask extends TimerTask {
public void run() {
Location mLocation =
mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
// Do something with mLocation
}
}
...
}
对比
...
@Override
public void onCreate() {
Timer timer = new Timer();
TimerTask mGetLastKnownLocationTask = new GetLastKnownLocationTask();
timer.schedule(mGetLastKnownLocationTask, 0, 60000);
}
private class GetLastKnownLocationTask extends TimerTask {
public void run() {
LocationManager mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location mLocation =
mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
// Do something with mLocation
}
}
注意:我不需要 LocationListener 来保持 GPS 处于活动状态。这是在应用程序的另一部分使用单独的服务处理的。在这里,我只想以固定的时间间隔检查最近的已知位置。