のドキュメントでは、さまざまな異なるコンテキスト間でサービス オブジェクトを共有しないgetSystemService
ようにアドバイスしています。
単一のコンテキストの場合、サービス オブジェクトをインスタンス フィールドに割り当ててキャッシュするのが望ましいonCreate()
ですか、それとも使用時に取得する必要がありますか? 慣用的な使用法は何ですか?
のドキュメントでは、さまざまな異なるコンテキスト間でサービス オブジェクトを共有しないgetSystemService
ようにアドバイスしています。
単一のコンテキストの場合、サービス オブジェクトをインスタンス フィールドに割り当ててキャッシュするのが望ましいonCreate()
ですか、それとも使用時に取得する必要がありますか? 慣用的な使用法は何ですか?
システム サービス オブジェクトの保持には継続的なコストがほとんどかからないため、データ メンバーで保持することをお勧めします。必要に応じて取得するかonCreate()
、遅延初期化するかはあなた次第です。
システム サービス オブジェクトを使用すると、かなりのコストがかかる場合があることに注意してください。インスタンスの保持LocationManager
は安価です。GPS の使用 (例: 経由requestLocationUpdates()
) は安くはありません。
私は同じことを尋ねようとしていました。これが私が行う方法です-サービス内(Contextから継承)
private static volatile LocationManager lm; // not final - we need a context
private LocationManager lm() {
LocationManager result = lm;
if (result == null) {
synchronized (LocationMonitor.class) { // my service
result = lm;
if (result == null)
result = lm = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
}
}
return result;
}