これは LocationManager (より一般的には Android でのメモリと CPU の使用量の管理) に関連する効率性の問題です。ロケーションを更新するために、LocationManager の getLastKnownLocation メソッドを 60 秒ごとに使用したい長期サービスがあるとします。このサービスは、固定遅延実行を繰り返す TimerTask と Time を使用します。インスタンス フィールド mLocationManager を作成し、それをサービスの存続期間中保持する方が良いですか、それとも、VM が必要な間だけ保持すると思われる場合に、TimerTask の実行ごとに LocationManager をインスタンス化する方が良いですか? コード内:
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
}
}
注: GPS をアクティブに保つために LocationListener は必要ありません。これは、別のサービスを使用してアプリケーションの別の部分で処理されます。ここでは、一定の間隔で最新の既知の場所のみを確認したいと考えています。