0

将Singleton注入BroadcastReceiver是一种很好的做法吗?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(); 
    } 
} 

其实它的工作原理,但我不知道有关性能和可能的内存泄漏该情况可能导致的。有没有关于注射可能导致的性能和可能的滞后的想法?

回答

1

这应该没问题。一个BroadcastReceiver实例只有在它从onReceive返回时才有效。在那之后,只要你没有像引用它那样做一些愚蠢的事情,它就有资格进行垃圾回收。

此外,你不能真正“泄漏”一个单身人士的对象,因为基本上他们预计会永远持续下去!