Bugün Android üzerinde Java ile birlikte “Callback” ile yapısına bakacağız. Bununla birlikte birer tane “Runnable” ve “Handler” yapılarını örnek içerisinde kullanacağız. Bunlardan önce “Callback” kavramı nedir sorusunu yanıtlayalım. Kısaca, bir metodu çağırdıktan sonra bir süre sonra çağırdığımız yere tekrar dönmesidir. Örnek ile birlikte daha kolay anlayacağımızı düşünüyorum.
Öncelikle “Utils.java” adında yeni bir sınıf oluşturuyoruz. Ardından bir tane “interface” yazmamız gerekiyor. Bu “interface” içerisinde geri dönüşler için “override” edilecek metotları tanımlıyoruz. Sonra bir tane “static” olarak “countdown” adında metot yazıyoruz. Bu metot parametre olarak “Callback interface” ve bir tane tamsayı değeri alsın. Kısaca “static” metot demek o sınıfa ait nesne oluşturmadan metodu çağırabilmemiz anlamına gelmektedir. Ardından metot içerisinde “Handler” ve “Runnable” kullanarak bir tane geri sayım işlemi yapan yapı oluşturuyoruz. Oluşturduğumuz bu yapı aşağıdaki gibi oluyor. Zaman bittiği zaman ise öncelikle “Callback” içerisinde ki metodu çağırıyoruz ve ardından “countdown” işlemini tekrarlamak için “postDelayed” metodunu çağırıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package com.KemalBakacak.CallbackExample; import android.os.Handler; public static class Utils { public void countdown(final ICallback callback, final int time) { final Handler handler = new Handler(); handler.postDelayed( new Runnable(){ @Override public void run() { callback.onEndTime(); handler.postDelayed(this, time); } }, time); } public interface ICallback{ void onEndTime(); } } |
Şimdi “MainActivity.java” içerisinden çağırma kısmına geçelim.
Bahsettiğimiz gibi “static” olarak tanımladığımız için bir nesneye ihtiyacımız yok. Bunun için “Utils.coundown()” şeklinde içerisine parametreler vererek çağırabiliriz. Parametre olarak ise ilk önce “Callback” sınıfının bir nesneni, daha sonra kaçtan geriye sayacağını söylüyoruz. Burada dikkat etmemiz gereken bir şey daha var, zaman için milisaniye cinsiden değer almakta yani 1000 ile saniye çarpımı şeklinde yolluyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package com.KemalBakacak.CallbackExample; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; public class MainActivity extends AppCompatActivity { private String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Utils.countdown(new Utils.ICallback() { @Override public void onEndTime() { Log.d(TAG, "Bitti"); } }, 5000); } } |
Log ekranının ekran görüntüsünü verelim.
Görüldüğü gibi her 5 saniye de bir kere “onEndTime” metodu içerisine giriyor.
Teşekkürler, görüşmek üzere.