Android Handler ile Kodu Belirlenen Süre Sonunda Çalıştırma

Categories AndroidPosted on

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ı

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.