ResultReciver Sınıfı Ile Servis Işlemleri

ResultReciver sınıfı processler arası haberleşmede kullanılabilecek bir çok karmaşık işlemi kendi içerisinde halletmiş bir sınıftır.ResultReciver sınıfı Parcelable bir sınıftır. ResultReciver genel çalışma prensibi şöyledir.

  • IntentService sınıfından bir sınıf türetilir.Bu sınıf içerisinde onHandleIntent metodu override edilerek client programdan gelen istek karşılanır.
  • Karşılanan isteğe göre ResultReciver sınıfının send metodu kullanılarak client programa bir Bundle ile bilgi gönderilir.Client programda ilgili servisi başlatır ve bir callback metod ile gelen sonucu dinler.Burada intentService kullanımı tamamen işi kolaylaştırmak içindir.Yoksa servis sınıfından da türetilebilir.

[Dropbox]080-ResultReceiverService

Dropbox]080-ResultReceiverService ne yapar?

  • ResultReceiverService

    Bağlanılacak servis ve lokalden bu servisi kullanma kodu yazıldı.

    onHandleIntent de intent parametresının getParcelableExtra diyerek resultReceiver türünden geri dönüşü olan anahtar sözcüğü bilinen data alınır.

    Bu data içerisinde hasExtra ile aranan mesaj var mı yok mu kontrol edililir. geri cevap vermek için send diyerek dönülür.

    Butona basılınca da client olarak servise bağlanılır.

    Gui threadde handler oluşturulur.handlela ResultReciver açılır ve onReceiveResult metodu yazılır. client alma işlemini burda yapar.

Mesaj gönderip alma işlemi bundle yardımıyla yapıldığı için bu bundlelara ilişkin anahtarın iki tarafta da bilinmesi gerekmektedir.

onHandleIntent içerisinde ResultReceiver türünden bir referans alınır.

ResultReceiver sınıfı lokal servis olarak da kullanılabilir.

Client tarafta ResultReceiver sınıfın onReceiveResult metodu ile sonuç alınabilir.

    ResultReceiver rr = new ResultReceiver(m_handler)
    {
        @Override
        protected void onReceiveResult(int resultCode, Bundle resultData)
        {
            super.onReceiveResult(resultCode, resultData);
        }
    };

onReceiveResult metodunun

  1. parametresi servis tarafından gönderilen result kodudur.
  2. parametresi ise service tarafından gönderilen bundle referansıdır.

onReceiveResult içerisinde verilen Handler'a ilişkin işlem yapılabilir.


Clientın data göndermekte kullanacağı kod aşağıdaki gibi yazılabilmektedir.

    public void doClick(View v)
    {
        Intent intent = new Intent(this, ResultReceiverService.class);

        intent.putExtra("MERHABA", "MERHABA");
        intent.putExtra("MESSAGE", rr);
        this.startService(intent);

    }

Farklı processlerden bağlantı durumunda ResultRecevier sınıfı içsel olarak hallettiğinden programcının onBind metodunu yazması gerekmez. Bu işlem doğrudan yapılabilir.

Android Servisler içierisinde Procesler arası haberleşmenin en kolay yapıldığı yöntem ResultReciver sınıfıdır.ResultReciver ile programcının ayrıca binder işlemlerini yapması gerekmez.Fakat unutulmamalıdırki kullanım açısından bakıldığında bu bir servis gibi çalışmaz.Aslında birbirlerine bilgi gönderen ve bu bilginin anlamına göre işlem yapıp yine sonucu gönderen mantıksal bir servistir.

Anahtar Notlar:

Servisler başka makinalardaki processler arasındaki haberleşmede doğrudan kullanılamazlar.Başka makinalar arasında haberleşmede kullanılan servisler için Android işletim sistemindeki uygulama bir hizmet alan uygulama(consumer) olarak yazılmalıdır ve ya daha aşağı seviyeli olarak TCP/IP uygulamarı yazılabilir.

Android Web Servisleri Kullanımı