BroadcastReceiver 中的依赖注入
Dependency Injection in BroadcastReceiver
将 Singleton 注入 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();
}
}
实际上它可以工作,但我不确定这种情况可能导致的性能和可能的内存泄漏。有没有关于注入可能导致的性能和可能滞后的想法?
这应该没问题。 BroadcastReceiver 实例仅在它从 onReceive 到 return 时才有效。之后它就有资格进行垃圾回收,只要你没有做一些愚蠢的事情,比如持有对它的引用。
此外,您不能真正 "leak" 一个单例对象,因为基本上它们应该永远存在!
将 Singleton 注入 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();
}
}
实际上它可以工作,但我不确定这种情况可能导致的性能和可能的内存泄漏。有没有关于注入可能导致的性能和可能滞后的想法?
这应该没问题。 BroadcastReceiver 实例仅在它从 onReceive 到 return 时才有效。之后它就有资格进行垃圾回收,只要你没有做一些愚蠢的事情,比如持有对它的引用。
此外,您不能真正 "leak" 一个单例对象,因为基本上它们应该永远存在!