gpt4 book ai didi

android - 使用 Dagger 2 注入(inject)服务

转载 作者:IT老高 更新时间:2023-10-28 22:14:10 25 4
gpt4 key购买 nike

我有一个应用程序,它基本上是一项服务,它始终运行并在发生某些事情时向用户发出警报。

当服务创建警报时,它需要给它自己的context,以便警报可以在发生事情时对服务进行回调

例如:

public MyService extends Service{
private SomeAlarm alarm;

@Override
public void onCreate() {
super.onCreate();
alarm = new SomeAlarm(MyService.this);
}
}

如何将 SomeAlarm 类注入(inject)到服务中,并将服务上下文作为变量赋予 SomeAlarm

最佳答案

我是从头顶写的代码,所以可能有一两个错字。

您的操作与将内容注入(inject) Activity 时一样。

  1. 声明一个组件,
  2. 将注入(inject)方法添加到该组件,
  3. 添加提供服务的模块
  4. 创建组件构建器
  5. 将您的模块添加到构建器中
  6. 使用组件注入(inject)您的服务

您的模块和组件看起来像这样(可能会添加一些范围)

@Module
class ServiceModule {

MyService mService;

ServiceModule(MyService service) {
mService = service;
}

@Provides
MyService provideMyService() {
return mService;
}
}

@Component(modules=ServiceModule.class)
interface MyServiceComponent {
void inject(MyService service);
}

然后在 onCreate 中创建您的组件并注入(inject)您的警报。

@Inject
private SomeAlarm alarm;

public void onCreate() {
DaggerMyServiceComponent.builder()
.serviceModule(new ServiceModule(this))
.build()
.inject(this);

alarm.doStuff();
}

这是假设您的警报可以通过具有 @Inject 带注释的构造函数注入(inject)构造函数,如下所示:

class SomeAlarm {
@Inject
SomeAlarm(MyService service) {
/*constructor stuff*/
}
}

否则,您也只需将警报创建添加到您的模块中。

关于android - 使用 Dagger 2 注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37052261/

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