آموزش تایمر در اندروید

امتیاز 5.00 ( 1 رای )

سلام دوستان این بار با آموزش تایمر در اندروید بازگشتیم این آموزش هر چند دیده نمی شود ولی کارایی بسیار بالایی دارد.خب برویم به سراغ بخش کد برنامه شیرین ترین بخش ! 🙂

 Timer timerObj = new Timer();
    TimerTask timerTaskObj = new TimerTask() {
        public void run() {
           //perform your action here
        }
    };
    timerObj.schedule(timerTaskObj, 0, 15000);

ابتدا یک object  از تایمر ایجاد کرده سپس باید یک TimerTask برای زمان بندی تایمر ایجاد شده ایجاد کنیم بعد از آن یک void ایجاد کرده سپس در این void که از نام آن run است را اجرا می کنیم و در اخر بعد از بسته شدن void زمان زمانی بندی کردن تایمر ایجاد شده می کنیم برای این کار از ویژگی Schedule (به معنی زمان بندی) را فراخوانی کرده و در آخر “زمان” را برای تایمر ست می کنیم تایمر را باید به میلی ثانیه بدهیم به طور مثال یک ثانیه برابر است با 1000 میلی ثاینه .
شاید بخواهید یک تایمر تکرار ایجاد کنید برای این کار می توانیم از کد زیر استفاده کنیم.

Timer timer = new Timer();
TimerTask t = new TimerTask() {
    int sec = 0;
    @Override
    public void run() {
    }
};
timer.scheduleAtFixedRate(t,1000,1000);

کد بالا نیز شبیه کد قبلی است با این تفاوت که این تایمر 1000 بار اجرا می شود یعنی بعد از هر یک ثانیه تا 1000 بار اجرا می شود.
برویم به سراغ شمارنده (counter) معکوس به کد زیر نگاه کنید.
 

new CountDownTimer(30000, 1000) {
    public void onTick(long millisUntilFinished) {
        mTextField.setText("Seconds remaining: " + millisUntilFinished / 1000);
    }
    public void onFinish() {
        mTextField.setText("Done");
    }
}.start();

از کد بالا برای ایجاد تایمر معکوس استفاده کنیم و کنترلی بیشتری نسبت به تایمر های قبلی داریم به این صورت که در صورت تموم شدن این تایمر پیغام Done نمایش داده می شود.
این بخش مخصوص تایمر است ولی گفتم شاید بعضی از دوستان به کد زیر نیاز داشته باشند کد زیر یه کار به صورت پشت سر هم بعد از یک فاصله زمانی احرا کند.به طور مثال می خواهید اینترنت را هر 15 ثانیه یک بار چک کنید برای این کار می توانید از کد زیر استفاده کنید.

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
  @Override
  public void run() {
    //Do something after 100ms
  }
}, 1000);

کد بالا بعد از فاصله زمانی یک ثانیه ای یک دکد را اجرا می کند ولی استفاده بیش از حد از کد بالا سبب memory leak می شود.
استفاده از کد بالا به صورت ساده شده مانند زیر

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        //Do something after 100ms
    }
}, 1000);

کدی قوی تر از کد های بالا کد زیر از api ورژن 1 تا 24 کار می کند و کد قدرتمندی است.

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
    @Override
    public void run() {
        //Do something here
    }
}, 5000);

کد بالا بعد هر 5 ثاینه یک کار را انجام می دهد.
در صورت استفاده از کد بالا ممکن است به ارور بر بخورید زیرا کد های بالا در یک ترد دیگر است به طور مثال اگر بخواهید مقدار متن یک دکمه را تغییر دهید باید از RunOnUiThread استفاده کنید همانند زیر

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //Do something after 1 second
            }
        }, 1000);
    }
});

کد های مختلفی از این دست برای تایمر وجود دارد همانند زیر

new Timer().schedule(new TimerTask() {
    @Override
    public void run() {
        // this code will be executed after 2 seconds
    }
}, 2000);

آموزش به اتمام رسید انشاالله مفید بوده باشد.
 

مطالعه بیشتر