同様の質問をした人が他にもいたことは知っていますが、bindService を呼び出すときに false を回避する方法についての回答を得ることができませんでした。
基本的に、2 つのサービスに接続するアプリを作成しました。それらは両方とも私のマニフェストにあります:
<service android:name="com.test.LService"></service>
<service android:name="com.test.CService"></service>
CService は期待どおりに機能し、常に機能しています。昨日 LService を追加しましたが、まったく起動しません。もともと MainActivity に LocationListener 実装がありましたが、フォーカスされているアクティビティとは無関係に GPS 座標を収集したかったことに注意してください。スペースを節約するために、私が問題を抱えているサービスである 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 を返しています。はぁ...
更新 2:状況をデバッグしようとするのは大まかですが、CService は ClassLoader に落ちますが、LService はまったく落ちません。どこかに間違ったクラス識別子がある可能性はありますか?!? 私にはすべて問題ないように見えます。
更新 3:あきらめて、LocationListener を CService サービスにマージしました...できたらこの質問を閉じます。