尝试连接2个服务时,Android bindService返回false

时间:2013-03-12 13:40:15

标签: android android-service locationlistener

我知道还有其他人提出了类似的问题,但在调用bindService时,我无法得到如何克服错误的答案。

基本上我写了一个连接到2个服务的应用程序。他们都在我的清单中:

<service android:name="com.test.LService"></service>
<service android:name="com.test.CService"></service>

CService按预期工作并且始终如此。我昨天添加了LService,它根本不会启动。请注意,我最初在MainActivity中使用了LocationListener imeplement,但我想收集GPS coords而不依赖于焦点的Activity。为了节省空间,我只需粘贴LService相关代码,因为它是我遇到问题的服务。在我的MainActivity中:

@Override
protected void onStart() {
    super.onStart();
    // bindService for LService always returns FALSE?!?!
    Log.d(TAG, "LService: " + this.context.bindService(new Intent(this, LService.class), mLConnection, Context.BIND_AUTO_CREATE));
    Log.d(TAG, "CService: " + this.context.bindService(new Intent(this, CService.class), mCConnection, Context.BIND_AUTO_CREATE));
}

private ServiceConnection mLocConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName className, IBinder service) {
        LocBinder binder = (LocBinder) service;
        mLocService = binder.getService();
        mLocBound = true;
    }

    @Override
    public void onServiceDisconnected(ComponentName className) {
        mLocBound = false;
    }
};

在LService类中,您期望的所有绑定内容:

private final IBinder mBinder = new LBinder();

@Override
public IBinder onBind(Intent intent) {
    return mBinder;
}

public class LBinder extends Binder {
    public LService getService() {
        return LService.this;
    }
}

唯一可能是问题的是我的LService实现了LocationListener:

public class LocService extends Service implements LocationListener {
...

CService没有实现任何东西,只是像它应该扩展服务。您是否认为将LocationListener作为工具删除,并在子类中重新实现它可以解决问题?可能是某些Android反射看到工具并确定它不适合作为服务?为什么没有例外呢?有任何想法吗?谢谢!

更新:好吧,这不是因为LocationListener实现。我从LService中删除了它,它仍然返回FALSE。叹息...

UPDATE2:尝试调试情况非常糟糕,但CService会进入ClassLoader,而LService根本不会。有可能某处的某个类标识符不正确吗?!?一切看起来都不错。

UPDATE3:我放弃了,只是将LocationListener合并到我的CService服务中......我会尽可能地关闭这个问题。

1 个答案:

答案 0 :(得分:0)

我无法关闭这个问题所以我只会回答我最终做的事情。

我放弃了,只是将LocationListener合并到了我的CService服务中,并放弃了试图弄清楚为什么我的第二个服务不起作用。仍然对意见感兴趣!