0

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

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

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

CService 按预期工作并且始终如此。我昨天添加了 LService,它根本不会启动。请注意,最初我在 MainActivity 中有我的 LocationListener 实现,但我想收集 GPS 坐标,而与焦点所在的 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 没有实现任何东西,它只是像它应该的那样扩展了 Service。您是否认为将 LocationListener 删除为实现,并在子类中重新实现它会起到作用?会不会是一些 Android 反射看到了实现并确定它不适合作为服务?为什么没有例外?有任何想法吗?谢谢!

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

UPDATE2:尝试调试情况很糟糕,但是 CService 会掉入 ClassLoader 而 LService 根本不会。某处是否可能存在不正确的某些类标识符?!?在我看来一切都很好。

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

4

1 回答 1

0

我无法结束这个问题,所以我只会回答我最终做了什么。

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

于 2013-03-12T22:33:24.643 回答