我知道还有其他人问过类似的问题,但我无法得到关于如何在调用 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 服务中......我会尽可能关闭这个问题。