1

シングルトンをBroadcastReceiverに注入するのは良い習慣ですか?

より具体的には、次のようなシングルトンがあると仮定します。

@Singleton
public class UnitProvider {

    private boolean mIsUsingCelsius = false;

    protected SharedPreferences mSharedPrefs;

    @Inject
    public UnitProvider(SharedPreferences sharedPrefs) {
        mSharedPrefs = sharedPrefs;
        mIsUsingCelsius = isUsingCelsiusPref(Locale.getDefault()); 
     }

    public void refreshCelsius() {

        if (!mSharedPrefs.contains(SharedPreferencesConstants.SP_KEY_USE_CELSIUS)) {
            mIsUsingCelsius = isUsingCelsiusBasedOnLocale(Locale.getDefault());
        } 
    }
}

そして、放送受信機があります:

public class DummyReceiver extends BroadcastReceiver {
    @Inject protected UnitProvider mUnitProvider;

    @Override
    public void onReceive(Context context, Intent intent) {
        DependencyInjectionService.inject(this);
        mUnitProvider.refreshCelsius();
    }
}

実際には機能しますが、パフォーマンスと、その状況が引き起こす可能性のあるメモリ リークについてはわかりません。インジェクションが引き起こす可能性のあるパフォーマンスとラグについて何か考えはありますか?

4

1 に答える 1

2

これで問題ありません。BroadcastReceiver インスタンスは、onReceive から返されるまでの間だけ存続します。参照を保持するなどのばかげたことをしない限り、その後はガベージ コレクションの対象になります。

また、基本的には永遠に続くことが期待されるため、シングルトンオブジェクトを実際に「リーク」することはできません!

于 2016-02-12T01:53:27.333 に答える