我知道这个问题已经有了答案,但还有另一种方法可以解决它。
首先,使你的应用程序扩展HasServiceInjector
,像这样:
public class App extends Application implements HasActivityInjector,
HasServiceInjector {
@Inject
DispatchingAndroidInjector<Activity> dispatchingActivityInjector;
@Inject
DispatchingAndroidInjector<Service> dispatchingServiceInjector;
@Override
public void onCreate() {
super.onCreate();
AppInjector.init(this);
}
@Override
public AndroidInjector<Activity> activityInjector() {
return dispatchingActivityInjector;
}
@Override
public AndroidInjector<Service> serviceInjector() {
return dispatchingServiceInjector;
}
}
然后创建一个ServiceBuilderModule
,它会对服务执行注入:
@Module
abstract class ServiceBuilderModule {
@ContributesAndroidInjector
abstract MyService contributeMyService();
}
然后将新模块注册到您的组件
中
@Component(modules = {
AndroidSupportInjectionModule.class,
AppModule.class,
ActivityBuilderModule.class,
ServiceBuilderModule.class
})
@Singleton
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(App application);
AppComponent build();
}
void inject(App app);
}
然后覆盖您的服务的onCreate
方法,并像下面的代码一样添加AndroidInjection.inject(this)
:
```java
@Override
public void onCreate() {
super.onCreate();
AndroidInjection.inject(this);
}
```
public class MyService extends Service {
@Override
public void onCreate() {
AndroidInjection.inject(this);
super.onCreate();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
kotlin
中的代码与上述代码完全相同。希望这能帮助一些编程人员。