Android Arkaplan Servisleri Geliştirmek.[ÇEVİRİ KONU ]

Zeref

Uzman üye
13 Nis 2014
1,960
3
fy
Merhaba arkadaşlar bu gün sizlere androidde arkaplan servisi nasıl geliştirilir bundan bahsedeceğim.Bunu yapmanın iki yolu var service ve intentservice

Hadi Başlayalım.

Kod:
http://blog.rhesoft.com/images/android-studio.png

Android Studio Tutorial

1.Android Tutorial Hakkında

Size bir çok şey göstereceğim.İyi çalışan kütüphaneleri ,kullanıcı arayüzlerini ve daha nicelerini.

bu rehberlerde Android Studio ve Gradle kullanacağım.Herhangi bir kütüphane hakkında bir sorunuz olursa özgürce sorabilirsiniz ve belki ben bu konuda bir tutorial hazırlayabilirim.

Bu arada projemizin kaynak kodları ve diğer içerikler için Github linki

2.Android Arkaplan Sevisleri

Herhangi bir işi gerçekleştirmek için arkaplan servislerini kullanmak isteyebilirsiniz.Bunun için elimizde iki yöntem var bundan yukarıda zaten bahsetmiştim.

Service herhangi bir Android arka plan hizmeti için gerekli temel sınıftır.Bu sınıf herhangi bir arkaplan sınıfını execute etmek ve kill etmek için bazı methodlar sunar.
İntentSercive daha basit bir sınıftır.Ayrı çalışan threadleri bütün işlemlerden sonra kendisi sonlandırır.

Hadi anlattıklarımızı pratiğe dökelim.

3.Android Studio Projesi Oluşturmak

Boş bir proje oluşturalım.(Blank Activiy)
Aynı projede iki yöntemide test edeceğiz.


Bu sınıfların yaşam döngüsü hakkında ayrıntılı bilgi için dökümantasyona göz atabilirisiniz.

4. -IntentService Uygulaması

İntentService ile bir Cpu'nun göreveleri engelleme (Blocking Task)yöntemlerini simule edeceğiz tıpkı bir dosya işleme ve resim işlemede olduğu gibi.(çn: Asenkron çalışan threadler ve process alakalı olsa gerek java bilmiyorum .)

TutorialIntentService adında İntentServiceden referans alan bir sınıf oluşturuyoruz.Mesela şöyle bir şey.

Kod:
public class TutorialIntentService extends IntentService{

  public TutorialIntentService() {
     this(TutorialIntentService.class.getName());
  }


  /**
   * Creates an IntentService.  Invoked by your subclass's constructor.
   *
   * @param name Used to name the worker thread, important only for debugging.
   */
  public TutorialIntentService(String name) {
      super(name);
  }

  @Override
  protected **** onHandleIntent(Intent intent) {

  }
}


İntentService daha basit bir servistir. Bu hizmet yürütüldüğünde, onHandleIntent methodu çalıştırılacaktır. Zaten yeni bir thread üzerinde çalışacak, böylece cpu-blocking task işlemini buradan yürütebilirsiniz.

hadi bir dosya sıkıştırma işlemini 10 saniyeliğine simule edelim.

Kod:
@Override
protected **** onHandleIntent(Intent intent) {
   showToast("Starting IntentService");
   try {
       Thread.sleep(10000);
   } catch (InterruptedException e) {
       Thread.currentThread().interrupt();
   }
   showToast("Finishing IntentService");
}

Çalışırken kullanıcı arayüzünde bir şey gözükmeyebililr bunu göstermek için Toast kulllanıyoruz.(Bknz:Android – Toast Kullanımı | Kod5.org)

Kod:
protected **** showToast(final String msg){
    //gets the main thread
    Handler handler = new Handler(Looper.getMainLooper());
    handler.post(new Runnable() {
        @Override
        public **** run() {
            // run this code in the main thread
            Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
        }
    });
}


Hadi şimdi nasıl bir service yaratacağımıza bakalım.

5.Service uygulaması

Service ile sistemde sürekli olarak çalışan bir görevi simule edeceğiz.

Yeni oluşturduğumuz Sınıfa TutorialIntentService ismini verip IntentService sınıfını refere ediyoruz.


Kod:
package com.rhesoft.blog.backgroundservice;

import android.app.Service;
import android.content.Intent;
import android.os.*;
import android.os.Process;
import android.widget.Toast;

public class TutorialService extends Service {

  private Looper mServiceLooper;
  private ServiceHandler mServiceHandler;

  @Override
  public **** onCreate() {
      // To a**** cpu-blocking, we create a background handler to run our service
      HandlerThread thread = new HandlerThread("TutorialService",
                                Process.THREAD_PRIORITY_BACKGROUND);
      // start the new handler thread
      thread.start();

      mServiceLooper = thread.getLooper();
      // start the service using the background handler
      mServiceHandler = new ServiceHandler(mServiceLooper);
  }

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
      Toast.makeText(this, "onStartCommand", Toast.LENGTH_SHORT).show();

      // call a new service handler. The service ID can be used to identify the service
      Message message = mServiceHandler.obtainMessage();
      message.arg1 = startId;
      mServiceHandler.sendMessage(message);

      return START_STICKY;
  }

  protected **** showToast(final String msg){
    //gets the main thread
    Handler handler = new Handler(Looper.getMainLooper());
    handler.post(new Runnable() {
        @Override
        public **** run() {
            // run this code in the main thread
            Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
        }
    });
  }

  @Override
  public IBinder onBind(Intent intent) {
      return null;
  }

  // Object responsible for
  private final class ServiceHandler extends Handler {

      public ServiceHandler(Looper looper) {
          super(looper);
      }

      @Override
      public **** handleMessage(Message msg) {
          // Well calling mServiceHandler.sendMessage(message); from onStartCommand,
          // this method will be called.

          // Add your cpu-blocking activity here
      }
  }
}

Yukarıdaki kod, yeni bir thread başlatacak ve bu thread servisleri çalıştıracaktır. Her Service ServiceHandler sınıfında çalışacak ve handleMessage üzerinde arka plan görevlerinizi eklemeniz gerekiyor.

benimkisii basit bir örnek sadece 5 saniyede sona eriyor.

Kod:
@Override
public **** handleMessage(Message msg) {
    // Well calling mServiceHandler.sendMessage(message);
    // from onStartCommand this method will be called.

    // Add your cpu-blocking activity here
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
    showToast("Finishing TutorialService, id: " + msg.arg1);
    // the msg.arg1 is the startId used in the onStartCommand,
    // so we can track the running sevice here.
    stopSelf(msg.arg1);
}


6. Servisi Kaydetmek (Register)

Android servislerine manifest içerisine de eklemelisiniz kullanıdğınız projelerde.
Kod:
<service android:name=".TutorialIntentService" />
<service android:name=".TutorialService" />




7.Projeyi Çalıştırın.

Her iki hizmeti de aynı şekilde başlatabilirsiniz. Bu tutorialı basit tutmak için, boş projeyle oluşturulan MainActivity ile başlatıyorum.







 
Son düzenleme:

Volkan FG

Uzman üye
31 Ara 2015
1,075
1
©Volkan&#848
Eline sağlık dostum konu oldukça faydalı görünüyor iyi çevrimiş :RpS_thumbsup:
 
Moderatör tarafında düzenlendi:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.