Служба обратного вызова к активности в Android - PullRequest
13 голосов
/ 08 января 2010

У меня запущена фоновая служба, и клиент взаимодействует с ней.

Когда клиент запрашивает какую-либо операцию, служба выполняет ее и должна отправить результат обратно операции (клиенту).

Я знаю, как вызывать сервисные методы в действии, и используя обратные вызовы, мы можем достичь того, что я хочу сделать.Но я не могу понять механизм обратного вызова и пример кода, представленный в демоверсиях Api (remoteservice).

Может кто-нибудь объяснить, как работает этот обратный вызов службы;или что-нибудь, что достижимо, используя более простой механизм.

1 Ответ

5 голосов
/ 05 ноября 2011

Вот поток
Создайте свое намерение позвонить в службу. Вы можете либо startService(), либо BindService() с BIND_AUTO_CREATE

Как только услуга становится связанной, она создаст туннель для общения с клиентами, который является IBinder Интерфейс. Это используется вашей реализацией интерфейса AIDL и возвращает IBinder in

private final MyServiceInterface.Stub mBinder = new MyServiceInterface.Stub() {
    public int getNumber() {
        return new Random().nextInt(100);
    }
};

public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "Service OnBind()", Toast.LENGTH_LONG).show();
    return mBinder;
}

Как только он вернет mBinder, ServiceConnection, который вы создали в клиенте, будут отозваны, и вы получите интерфейс службы, используя этот

           mConnection = new ServiceConnection() {

        public void onServiceDisconnected(ComponentName name) {
            // TODO Auto-generated method stub

        }

        public void onServiceConnected(ComponentName name, IBinder service) {
            // TODO Auto-generated method stub

            mService = MyServiceInterface.Stub.asInterface(service);


    };

Теперь у вас есть mService интерфейс для вызова и получения любой службы из этого

...