私は単純な音楽プレーヤーを作成しており、クライアントとバインドするAIDLインターフェイスを実装する再生サービスを作成しました。1つは単純なトラックブラウザーで、もう1つはさらに単純なプレーヤーアクティビティです。2つのアクティビティがServiceConnectionsを使用してサービスへの接続を取得している間、サービスはMediaPlayerオブジェクトを制御します。
これは、両方のアクティビティのonStart()メソッドに含まれています。
@Override
public void onStart()
{
super.onStart();
Intent i = new Intent(this, PureService.class);
startService(i);
bindService(i, mConnection, 0);
}
これは、バインドを解除してもサービスがすぐに停止しないようにするためです。もちろん、私のアクティビティがサービスからのバインド解除をまったく拒否するため、これは実際には問題ではありません。アプリケーションがこれらのアクティビティのいずれかでunbindServiceに到達すると、unbindServiceは例外なく毎回IllegalArgumentExceptionをスローします(hehe)。
onStopメソッドの場合:
@Override
public void onStop()
{
super.onStop();
if (mBound) {
try {
unbindService(mConnection);
} catch (java.lang.IllegalArgumentException e)
{
//Print to log or make toast that it failed
}
}
mBound = false;
}
私が疑問に思っているのはこれです:
- onStop()メソッドでunbindService()を呼び出す必要がありますか?それともまったく?
- 私はそれを正しく呼んでいますか?
- 私が知っておくべきサービスを開始/バインドする方法について何か特別なことはありますか?
- 私は完全に間違ったことをしていますか?私はAndroidプログラミングに不慣れなので、それは確かに問題外ではありません。
前もって感謝します。
編集:これがServiceConnectionのオーバーライドです
public void onServiceConnected(ComponentName className, IBinder service) {
mBound = true;
mService = IPureService.Stub.asInterface(service);
}
public void onServiceDisconnected(ComponentName arg0) {
mBound = false;
}
プレーヤーアクティビティには追加のコードがいくつかありますが、バインディング自体とは関係ありません。