17

私は英語が得意ではありませんが、自分の問題をうまく説明できるように努めます。

したがって、問題は次のとおりです
。1)ローカルサービスがあります
。2)それを開始してからバインドします。3) そのサービスを終了しようとすると問題が発生します。クラスServiceConnectionの実装からのonServiceDisconnectedメソッドは呼び出されません。手動で (設定から)、unbindService、stopService、または unbindService と stopService の組み合わせで閉じても、onServiceDisconnected は呼び出さません。私は何を間違っていますか?

ショートコードは次のとおりです。

protected ServiceConnection mServerConn = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder binder) {
        Log.d(LOG_TAG, "onServiceConnected");
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        Log.d(LOG_TAG, "onServiceDisconnected");
    }
}

public void start() {
    // mContext is defined upper in code, I think it is not necessary to explain what is it 
    mContext.bindService(i, mServerConn, Context.BIND_AUTO_CREATE);
    mContext.startService(i);
}

public void stop() {
    mContext.stopService(new Intent(mContext, ServiceRemote.class));
    mContext.unbindService(mServerConn);
}

Android 2.2のエミュレーターでこのコードをテストしています

4

3 に答える 3

30

onServiceDisconnected は、極端な状況 (クラッシュ/強制終了) でのみ呼び出されます。

通常、すべてのアプリケーション コンポーネントが同じプロセスで実行されるため、ローカル サービスで発生する可能性はほとんどありません。

于 2011-03-13T22:55:26.330 に答える
2

Android 開発者ドキュメントには次のように書かれています...

public abstract void onServiceDisconnected (ComponentName name)

サービスへの接続が失われたときに呼び出されます。これは通常、サービスをホストしているプロセスがクラッシュまたは強制終了された場合に発生します。これは ServiceConnection 自体を削除しません。このサービスへのバインディングはアクティブなままでありonServiceConnected(ComponentName, IBinder)、サービスが次に実行されたときに への呼び出しを受け取ります。

詳細: https://developer.android.com/reference/android/content/ServiceConnection#onServiceDisconnected(android.content.ComponentName)

于 2020-07-13T16:19:01.477 に答える