【问题标题】:How to inject a bound service into an Activity via dagger?如何通过匕首将绑定服务注入活动?
【发布时间】:2019-11-16 16:54:59
【问题描述】:

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

非常感谢。

【问题讨论】:

    标签: android dagger-2


    【解决方案1】:

    我不认为以这种方式(通过注入字段)注入服务会起作用,因为您无法控制服务对象的实例化。

    如果您的服务包含需要注入的字段,您必须像注入活动一样注入onCreate(),即调用DaggerMyAppComponent.inject(this)

    关于 ServiceConnection:您必须按照http://developer.android.com/guide/components/bound-services.html 中所述的常规方式进行操作

    【讨论】:

      【解决方案2】:

      我正在处理相同的概念/问题,就像@Ognyan 所说的那样 - 您无法控制创建服务。

      我认为:How to access service functions from fragment, which is bound to parent activity in Android? 可能会对您有所帮助。

      您可以在 Application/Activity 中实例化服务并按照附加链接中的说明与其通信。

      您也可以考虑将接口(与服务通信)放在 Fragment/Activity 继承的基本抽象类(BaseActivity 或 BaseFragment)中,然后在您需要的任何 Fragment 或 Activity 中轻松访问接口。

      希望它能解决您的问题。

      【讨论】:

        猜你喜欢
        • 2021-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-01
        • 1970-01-01
        • 2015-11-04
        相关资源
        最近更新 更多