0

同様の質問をした人が他にもいたことは知っていますが、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 サービスにマージしました...できたらこの質問を閉じます。

4

1 に答える 1

0

この質問を閉じることはできないので、私がやったことで答えます。

私はあきらめて、LocationListener を CService サービスにマージし、2 番目のサービスが機能しない理由を突き止めることをあきらめました。それでも意見に興味があります!

于 2013-03-12T22:33:24.643 に答える