gpt4 book ai didi

android - 刀柄 : Why is a class in ApplicationComponent scope created twice?

转载 作者:行者123 更新时间:2023-12-04 03:50:25 27 4
gpt4 key购买 nike

我在一个多模块项目中使用 Hilt,并且有一个具有 ApplicationComponent 作用域的模块。我希望这个模块提供的所有东西都像一个单例,并且在应用程序的生命周期内只创建一次。但是,我看到所提供类的构造函数在每个 Activity 中被调用一次。这是一个测试设置:

MyModule.java:

@Module
@InstallIn(ApplicationComponent.class)
public abstract class MyModule {
@Binds
public abstract Foo providesDomain(MyFoo domain);
}

我的应用程序.java:

@HiltAndroidApp
public class MyApplication extends MultiDexApplication {
@Override
public void onCreate() {
super.onCreate();
}
}

每个 Activity :

@AndroidEntryPoint
public class MyActivity extends AppCompatActivity {

@Inject
Foo foo;

MyFoo.java:

class MyFoo implements Foo {
@Inject
public MyFoo(@NonNull Application application) {
Log.w("TEST", "My application: " + application);
}
}

对于每个 Activity ,都会调用 MyFoo 构造函数,但应用程序是相同的。我的理解是,这不应该发生在 ApplicationComponent 范围内的模块中。为什么要再次创建 MyFoo?

最佳答案

我将自己指向 the relevant Android documentation : 类本身需要用范围进行注释。

在上面的例子中,MyFoo只有在这样注解的情况下才会在应用范围内:

@Singleton
class MyFoo implements Foo {
@Inject
public MyFoo(@NonNull Application application) {
Log.w("TEST", "My application: " + application);
}
}

关于android - 刀柄 : Why is a class in ApplicationComponent scope created twice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64493443/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com