彼はおそらくAndroidのインタフェース定義言語(AIDL) http://developer.android.com/guide/components/aidl.html
を使用しているので、彼は文書化のように、サーバ側の実装のスタブを使用しています
// This is called when the connection with the service has been
// established, giving us the service object we can use to
// interact with the service. We are communicating with our
// service through an IDL interface, so get a client-side
// representation of that from the raw service object.
mService = IRemoteService.Stub.asInterface(service);
をiservice参照がから来ていますアクティビティにサービスをバインドした後に呼び出されるonServiceConnectedメソッド。 bindServiceの呼び出しは、onServiceConnectedメソッドを実装するServiceConnectionに渡されます。
サービスの実装がローカルの場合は、「IRemoteService.Stub.asInterface(サービス)」は必要ありません。サービスをローカルサービスにキャストするだけで済みます。
ローカルサービスのサンプルは、サービスでこれを行います。
public class LocalService extends Service {
private NotificationManager mNM;
// Unique Identification Number for the Notification.
// We use it on Notification start, and to cancel it.
private int NOTIFICATION = R.string.local_service_started;
/**
* Class for clients to access. Because we know this service always
* runs in the same process as its clients, we don't need to deal with
* IPC.
*/
public class LocalBinder extends Binder {
LocalService getService() {
return LocalService.this;
}
}
...
}
そして、これはServiceConnectionクラスでの活動に:ここ
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
// This is called when the connection with the service has been
// established, giving us the service object we can use to
// interact with the service. Because we have bound to a explicit
// service that we know is running in our own process, we can
// cast its IBinder to a concrete class and directly access it.
mBoundService = ((LocalService.LocalBinder)service).getService();
// Tell the user about this for our demo.
Toast.makeText(Binding.this, R.string.local_service_connected,
Toast.LENGTH_SHORT).show();
}
public void onServiceDisconnected(ComponentName className) {
// This is called when the connection with the service has been
// unexpectedly disconnected -- that is, its process crashed.
// Because it is running in our same process, we should never
// see this happen.
mBoundService = null;
Toast.makeText(Binding.this, R.string.local_service_disconnected,
Toast.LENGTH_SHORT).show();
}
};
ありがとう、私はそれを撃つだろう。しかし、上記のようにServiceService()とIBinderをbindService()に渡す[Local Service Sample](http://developer.android.com/reference/android/app/Service.html#LocalServiceSample)があります。私はそれがAIDLを使用しているとは思わない。多分@mnishがAIDLを使用していて、あなたが言うように、スタブの理由です。 – Marie
サンプルが魔法を行う部分を追加しました – Tosa
ごめんなさいわかりません。あなたは何を追加しましたか?ローカルサービスサンプルのLocalBinder?いいえ、すでにそこにいる。 mBoundService?いいえ、それはすでにです。すごく鈍いことに申し訳ありませんが、私はあなたが「サンプルがマジックを行う部分を追加しました」とは理解していません。あなたはあなたの答えを編集して、私はそれを見ていないだけですか? – Marie