اجرای کد بعد از زمان مشخصی به صورت مکرر در اندروید

اجرای کد بعد از زمان مشخصی به صورت مکرر در اندروید

اجرای کد بعد از زمان مشخصی به صورت مکرر در اندروید


اگر با ویژوال سی شارپ کار کرده باشید، کنترلی به نام Timer وجود دارد و این کنترل شامل یک رویداد Tick نیز می‌باشد که این رویداد برای مثال هر یک ثانیه یک بار اجرا می‌شود. فرض کنید می‌خواهید هر 20 ثانیه یک بار، چیزی از سرور دریافت کرده و محتوایی را آپدیت کنید.

این‌کار را می‌توان به روش‌های مختلفی انجام داد که در این پست، به چند مورد از آن‌ها شاره خواهیم کرد؛ شما دوستان عزیز تجربه‌ی خود را در مورد هرکدام، از قسمت نظرات می‌توانید برایمان ارسال کنید.

استفاده از Timer و TimerTask

کد زیر را بنویسید:

final Handler handler = new Handler();
Timer timer = new Timer(false);
TimerTask timerTask = new TimerTask() {
    @Override
    public void run() {
        handler.post(new Runnable() {
            @Override
            public void run() {
                Log.d("FK", "Time Tick");
            }
        });
    }
};

تا این‌جا صفر کنید.
قرار است که این کد، هر 5 ثانیه یک بار، یک لاگ برایمان چاپ کند. همانطور که می‌بینید، لاگگ را داخل handler نوشته‌ایم چرا که Timer یک Thread برای خود می‌سازد و ممکن است بخواهیم داخل آن به عناصر UI دسترسی داشته باشیم؛ برای همین از  Handler استفاده کرده‌ایم.
حالا باید زمان را مشخص کنیم.

متد schedule
اگر بخواهیم فقط برای یک بار اجرا شود:

timer.schedule(timerTask, 5000);

در این‌جا، کد بعد از گذشت 5 ثانیه اجرا خواهد شد. (زمان برحسب میلی ثانیه است)

متد scheduleAtFixedRate
اگر بخواهیم کد هربار بعد از گذشت یک زمان مشخصی اجرا شود:

timer.scheduleAtFixedRate(timerTask, 4000, 5000);

در این‌جا، کد بعد از گذشت 4 ثانیه اجرا شده و در ادامه، هر 5 ثانیه یک بار اجرا خواهد شد. پس ورودی زمان اول، تاخیر در اولین اجرا و ورودی زمان دوم، زمان اجرا در هربار می‌باشد.

استفاده از Thread

گرچه استفاده از Timer مزیت‌‌های خاص خودش را دارد، اما تایمر نیز از Thread بهره می‌برد و می‌توانیم با استفاده از Thread این‌کار را انجام دهیم.

new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    Log.d("FK", "Time Tick");
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

در این‌جا، ترد را داخل یک حلقه‌ی بی‌نهایت انداخته‌ایم که هربار پس از اجرای حلقه، بع مدت دوثانیه ترد به خواب می‌رود. می‌توانیم به جای بی‌نهایت کردن حلقه، یک متغیر Boolean برایش در نظر بگیریم تا هر زمانی که خواستیم، آن را متوقف کنیم.
پس درک این که تایمر چگونه کار می‌کند با درک تردها برایمان ساده خواهد شد.
همچنین در صورت دسترسی به عناصر UI، استفاده از Handler را فراموش نکنید.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

cp-codfk

نظرات ثبت شده بدون دیدگاه

توضیحات پیشنهادی نظرات اشتراک