Dagger - 带@Inject的android.app.IntentService

lst*_*cki 9 android dagger

是否可以将通过dagger暴露的对象注入android.app.IntentService?如果是这样,我该怎么做?

我希望有类似的东西.

public class SomeService extends android.app.IntentService {

@Inject
Synchronizer synchronizer;

public SomeService(String name) {
    super(name);
}

@Override
protected void onHandleIntent(Intent intent) {
    synchronizer.doSynch();
}
Run Code Online (Sandbox Code Playgroud)

}

Mic*_*kal 25

从匕首的角度来看,IntentService与其他任何阶级都没有什么不同.

注入可以看起来像那样(我假设你的应用程序有一个ObjectGraph实例并暴露方法注入).当然,不要忘记将类添加到Module定义中的注入类列表中.

  public class SomeService extends android.app.IntentService {

   @Inject
   Synchronizer synchronizer;

   public SomeService(String name) {
     super(name);
   }

   @Override
   public void onCreate() {
     super.onCreate();
     ((YourApplication) getApplication()).inject(this);
   }

   @Override
   protected void onHandleIntent(Intent intent) {
      synchronizer.doSynch();
   }
}
Run Code Online (Sandbox Code Playgroud)

  • `getApplication`可以在构造函数中返回`null`.如果是这样,您可以覆盖`onCreate`方法并在此处注入您的实例. (4认同)
  • 非常感谢你.这是我搜索的内容.你是对的.我可以补充一点,你需要在onCreate()方法中调用.inject方法.但整个想法都充满了魅力. (2认同)
  • 你不能在构造函数方法中获得应用程序.只有onCreate. (2认同)