اجرای یک سری کد، به صورت چندین بار
اجرای یک سری کد، به صورت چندین بار و با فواصل زمانی منظم و یک زمان نهایی برای پایان، با روش onTick از کلاس CountDownTimer ، در برنامه نویسی اندروید
کلاس CountDownTimer ، این قابلیت را هم دارد که در آن تعیین کنیم که یک سری کد، در فاصله های زمانی مشخص، اجرا شوند، البته تا وقتی که زمان تعیین شده به عنوان زمان پایان، فرا رسد.
برای این منظور، این بار باید از روش onTick موجود در کلاس CountDownTimer استفاده کنیم.
به عنوان مثال :
new CountDownTimer(17000,4000){
@Override
public void onTick(long millisUntilFinished){
// your code
}
@Override
public void onFinish(){}
}.start();
که در آن، به جای عبارت // your code باید کدهای مورد نظر خود را بنویسید.
دو عدد را برای کلاس CountDownTimer ذکر کرده ایم، یکی عدد 17000 میلی ثانیه (17 ثانیه) که زمان پایان را مشخص می کند و دیگری عدد 4000 میلی ثانیه (4 ثانیه) که بازه زمانی بین تکرار شدن اجرای کدها را مشخص کرده است.
بنابراین زمان پایان برابر 17000 میلی ثانیه (17 ثانیه) تعیین شده است و کدهای تعیین شده برای روش onTick هم تا قبل از فرا رسیدن زمان پایان، هر 4000 میلی ثانیه (4 ثانیه) یک بار، اجرا خواهند شد.
یک مثال کامل :
new CountDownTimer(17000,4000){
@Override
public void onTick(long millisUntilFinished){
Toast.makeText(getApplicationContext(), "kelidestan.com", Toast.LENGTH_SHORT).show();
}
@Override
public void onFinish(){}
}.start();
بنابراین کد زیر 4 بار اجرا خواهد شد (با فاصله زمانی 4 ثانیه) :
Toast.makeText(getApplicationContext(), "kelidestan.com", Toast.LENGTH_SHORT).show();
کلاس Toast برای نمایش یک پیام به مدت چند ثانیه، به کار می رود . کد بالا باعث نمایش عبارت kelidestan.com به مدت چند ثانیه می شود.
در متغیر millisUntilFinished ، مقدار زمان باقیمانده تا زمان پایان بر اساس میلی ثانیه، ذخیره می شود. برای درک بهتر این موضوع، کدهای زیر را اجرا نمایید :
new CountDownTimer(13000,4000){
@Override
public void onTick(long millisUntilFinished){
String str = "seconds remaining: " + millisUntilFinished / 1000;
Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
}
@Override
public void onFinish(){}
}.start();
بنابراین پیام های زیر با فاصله های 4 ثانیه ای، نمایش داده می شوند :
seconds remaining: 12
seconds remaining: 8
seconds remaining: 4
بنده بر اساس تجربه متوجه شدم که این روش، کاملا دقیق نیست (البته اگر زمان در حد میلی ثانیه برای شما مهم باشد). به عنوان مثال، اگر کد زیر را چندین بار اجرا کنید، اعداد میلی ثانیه مربوط به زمان، در اجراهای مختلف، متفاوت خواهند بود :
new CountDownTimer(13000,4000){
@Override
public void onTick(long millisUntilFinished){
String str = "milliseconds remaining: " + millisUntilFinished;
Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
}
@Override
public void onFinish(){}
}.start();