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.
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.
İ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.
Ç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)
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.
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.
6. Servisi Kaydetmek (Register)
Android servislerine manifest içerisine de eklemelisiniz kullanıdğınız projelerde.
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.
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: