Kısaca Android Timer ve Handler ne işe yarar?
Android programlamada zaman işlemlerinde sıkça kullanılan işlemlerden iki tanesi Timer ve Handler. Aslında Timer ve Handler, arka planda çalışan, belirli aralıklar ile tekrarlanmasını istediğimiz olayları yönetmemizi sağlayan esnek yapılardır. Belirli kodun belirli sürelerde kullanılmasını, çalışmasını istiyorsak kullanırız yani.
Uzun süren işlemlerde memory sorunu olabileceği için timer işlemleri önerilmemektedir.
Örneğin bir kodunuz var ve butona basıldıktan 1000 ms sonra çalışmasını istiyorsunuz bu durumda Handler kullanabilirsiniz.
Öncelikle Handler tanımlamalıyız. Handler tanımlaması:
Handler hndler= new Handler();
Daha sonra postDelayed() Fonksiyonunu kullanarak süre sonunda çalışacak kodları belirtebiliriz.
hndler.postDelayed(new Runnable() { @Override public void run() { // Süre sonunda burada yer alan kodlar çalışır. } // Kodların ne kadar süre sonra çalışacağını belirttik. Burada 1000 değeri ms (milisaniye) },1000);
Örnek Uygulama MainActivity Kodları
public class MainActivity extends AppCompatActivity { EditText editText; TextView textView; Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button=(Button)findViewById(R.id.button); textView=(TextView)findViewById(R.id.textView); editText=(EditText)findViewById(R.id.editText); // Butona basıldığında belirtilen süre kadar bekler ve istenilen işlemleri yapar. button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Handler hndler= new Handler(); hndler.postDelayed(new Runnable() { @Override public void run() { // Süre sonunda burada yer alan kodlar çalışır. textView.setText(editText.getText().toString()); } // Kodların ne kadar süre sonra çalışacağını belirttik. Burada 1000 değeri ms (milisaniye) },1000); } }); } }
Program MainActivity Tasarımı ve Ekran Çıktısı
Android Timer Kullanarak Ekranda Textview ile Geri Sayım Sayacı Yapmak
Yukarıda kodu istediğimiz süre sonunda çalıştırma eylemini yapmıştık. Peki bu sayım süresini ekranda gösteremez miyiz?
Örnek uygulamada ekranımız yukarıdaki örnek ile aynı ancak bu sefer belirli bir bekleme süresinden sonra yazımızı görmüyoruz. Butona bastığımızda ekranda geriye doğru sayan bir sayac bizleri karşılıyor.
public class MainActivity extends AppCompatActivity { EditText editText; TextView textView; Button button; int zaman; Runnable runnable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button=(Button)findViewById(R.id.button); textView=(TextView)findViewById(R.id.textView); editText=(EditText)findViewById(R.id.editText); // Butona basıldığında belirtilen süreden geri sayım yapmak ve Textview yardımı ile ekrana yazdırmak için button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final Handler hndler= new Handler(); textView.setText(""); // Runnable() fonksiyonunu kullanıyoruz. runnable=new Runnable() { @Override public void run() { zaman--; if (zaman!=0){ textView.setText(String.valueOf(zaman)); } else { // Zaman sıfır olmadığı sürece fonksiyonu tekrar tekrar çağırıyoruz. hndler.removeCallbacks(runnable); } hndler.postDelayed(runnable,1000); if (zaman==0){ // Zaman 0 olduğunda ekranda Toast mesajı gösterme işlemi. Toast.makeText(MainActivity.this,"Zaman Doldu",Toast.LENGTH_SHORT).show(); } } }; // runnable.run() Kodumuzun çalışabilemsi için runnable.run() komutu ile kodlarımızı run etmeliyiz. runnable.run(); } }); } }
Uygulama Tasarımı