如何通过匕首将绑定服务注入活动?

时间:2015-07-29 12:43:50

标签: android dagger-2

我想通过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(放入模块内的基类)放在哪里?

非常感谢。

2 个答案:

答案 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)中,然后轻松地在您需要的任何片段或活动中到达接口。

希望它可以解决您的问题。