10

のドキュメントでは、さまざまな異なるコンテキスト間でサービス オブジェクトを共有しないgetSystemServiceようにアドバイスしています。

単一のコンテキストの場合、サービス オブジェクトをインスタンス フィールドに割り当ててキャッシュするのが望ましいonCreate()ですか、それとも使用時に取得する必要がありますか? 慣用的な使用法は何ですか?

4

2 に答える 2

7

システム サービス オブジェクトの保持には継続的なコストがほとんどかからないため、データ メンバーで保持することをお勧めします。必要に応じて取得するかonCreate()、遅延初期化するかはあなた次第です。

システム サービス オブジェクトを使用すると、かなりのコストがかかる場合があることに注意してください。インスタンスの保持LocationManagerは安価です。GPS の使用 (例: 経由requestLocationUpdates()) は安くはありません。

于 2012-05-15T18:55:44.273 に答える
0

私は同じことを尋ねようとしていました。これが私が行う方法です-サービス内(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;
}
于 2013-12-02T18:52:00.337 に答える