【发布时间】:2012-08-13 13:27:05
【问题描述】:
这是一个与 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 处于活动状态。这是在应用程序的另一部分使用单独的服务处理的。这里我只想以固定的时间间隔检查最近的已知位置。
【问题讨论】:
标签: android optimization memory-management locationmanager