我想通过Dagger2为我的活动注入一个绑定服务。
我的服务声明如下:
Public class MyService extends Service{
private final IBinder mBinder = new LocalBinder();
...
public class LocalBinder extends Binder {
public MyService getService() {
return MyService.this;
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
public void doBackgroundTask() {
...
}
}
我的活动:
public abstract class MainActivity extends AppCompatActivity {
@Inject
MyService service;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
service.doBackgroundTask();
...
}
你将如何实现这一目标?你将把ServiceConnection
(放入模块内的基类)放在哪里?
非常感谢。
答案 0 :(得分:1)
我不认为以这种方式注入服务(通过注入字段)将起作用,因为您无法控制服务对象的实例化。
如果您的服务包含需要注入的字段,则必须以注入活动的方式注入onCreate()
,即调用DaggerMyAppComponent.inject(this)
。
关于ServiceConnection:您必须按http://developer.android.com/guide/components/bound-services.html
中所述的常规方式执行此操作答案 1 :(得分:0)
我正在处理相同的概念/问题,就像@Ognyan所说的那样-您将无法控制创建服务。
我认为:How to access service functions from fragment, which is bound to parent activity in Android?可能会对您有所帮助。
您可以在应用程序/活动中实例化服务,并按照附件中的链接与之通信。
您还可以考虑将接口(与服务进行通信)放在Fragment / Activity继承的基本抽象类(BaseActivity或BaseFragment)中,然后轻松地在您需要的任何片段或活动中到达接口。
希望它可以解决您的问题。