Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 广播接收机中的依赖注入_Android_Performance_Dependency Injection_Singleton_Android Broadcastreceiver - Fatal编程技术网

Android 广播接收机中的依赖注入

Android 广播接收机中的依赖注入,android,performance,dependency-injection,singleton,android-broadcastreceiver,Android,Performance,Dependency Injection,Singleton,Android Broadcastreceiver,将单例注入广播接收器是一种好的做法吗 更具体地说,假设我有如下所示的singleton: @Singleton public class UnitProvider { private boolean mIsUsingCelsius = false; protected SharedPreferences mSharedPrefs; @Inject public UnitProvider(SharedPreferences sharedPrefs) {

将单例注入广播接收器是一种好的做法吗

更具体地说,假设我有如下所示的singleton:

@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返回时才处于活动状态。在那之后,只要你没有做一些愚蠢的事情,比如持有对它的引用,它就有资格进行垃圾收集

此外,您不能真正“泄漏”一个单例对象,因为基本上,它们应该是永久的