Timer Task در اندروید

جمعه 30 بهمن 1394

در این مقاله با استفاده از متد java.util می خواهیم یک ativity یا action را در یک دوره ی زمانی مشخص یک پیغام toast را به کاربر نمایش دهد.در این مثال از یک کلاس timer task استفاده می نماییم.

Timer Task در اندروید

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

یک پروژه جدید از نوع اندروید تعریف نمایید.

نام پروژه و پکیج مورد نظر خود را به دلخواه هر آنچه که می خواهید قرار دهید.

یک activity جدید ایجاد نمایید.

یک آیکون به دلخواه و یک activity خالی ایجاد نمایید.

حالا یم فایل xml جدید داخل پوشه ی res/layout ایجاد نمایید.

بعد از ایجاد پروژه به صورت زیر خواهد بود.

داخل فایل xml خود باید از textview و button استفاده نمایید، که به صورت زیر خواهد بود:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
>
   <TextView         
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="مرجع تخصصی برنامه نویسان"
        android:textSize="25dp"
        android:padding="20dp"/>
   <TextView         
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="نمایش toast هر ده ثانیه یک بارکه باز دن کلیک انصراف متوقف خواهد شد"
        android:textSize="20dp"
        android:padding="20dp"/>
   <Button
        android:id="@+id/cancel"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="stoptimertask"
        android:text="انصراف" />
</LinearLayout>

در لایه ی بالا ما از padding برای تنظیم کردن ابزارها بر روی صفحه استفاده می نماییم، برای تغییر ابعاد padding ما از   dimens.xml استفاده می کنیم.

<resources> 
	    <!-- Default screen margins, per the Android Design guidelines. -->
	    <dimen name="activity_horizontal_margin">16dp</dimen>
	    <dimen name="activity_vertical_margin">16dp</dimen>	 
	</resources>

حالا یک کلاس جاوا به صورت زیر ایجاد نمایید و قطعه کد زیر را داخل آن قرار دهید:

import java.text.SimpleDateFormat;
	import java.util.Calendar;
	import java.util.Timer;
	import java.util.TimerTask;
	import android.app.Activity;
	import android.os.Bundle;
	import android.os.Handler;
	import android.view.View;
	import android.widget.Toast;
	 
	public class AndroidTimerTaskExample extends Activity {
	 
	    Timer timer;
	    TimerTask timerTask;
	     
	    //we are going to use a handler to be able to run in our TimerTask
	    final Handler handler = new Handler();
	 
	    @Override
	    protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.activity_main);
	    }
	 
	    @Override
	    protected void onResume() {
	        super.onResume();
	         
	        //onResume we start our timer so it can start when the app comes from the background
	        startTimer();
	    }
 
	    public void startTimer() {
	        //set a new Timer
	        timer = new Timer();
	         
	        //initialize the TimerTask's job
	        initializeTimerTask();
	         
	        //schedule the timer, after the first 5000ms the TimerTask will run every 10000ms
        timer.schedule(timerTask, 5000, 10000); //
	    }
	 
	    public void stoptimertask(View v) {
	        //stop the timer, if it's not already null
	        if (timer != null) {
	            timer.cancel();
	            timer = null;
	        }
	    }
	 
	    public void initializeTimerTask() {
	         
	        timerTask = new TimerTask() {
	            public void run() {
	                 
                //use a handler to run a toast that shows the current timestamp
	                handler.post(new Runnable() {
	                    public void run() {
	                        //get the current timeStamp
	                        Calendar calendar = Calendar.getInstance();
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd:MMMM:yyyy HH:mm:ss a");
	                        final String strDate = simpleDateFormat.format(calendar.getTime());
	                     
	                        //show the toast
	                        int duration = Toast.LENGTH_SHORT; 
	                        Toast toast = Toast.makeText(getApplicationContext(), strDate, duration);
	                        toast.show();
	                    }
	                });
	            }
	        };
	    }
	}

در این کلاس شما لایه ی activity_main را انتخاب می کنید.

setContentView(R.layout.activity_main);

برای شروع تایمر از قطعه کد زیر استفاده می کنیم:

public void startTimer() {
    //set a new Timer
    timer = new Timer();
	     
	    //initialize the TimerTask's job
	    initializeTimerTask();
	     
	    //schedule the timer, after the first 5000ms the TimerTask will run every 10000ms
	    timer.schedule(timerTask, 5000, 10000); //
	}

با استفاده از کد بالا به عنوان مثال ما هر 10000 ثانیه یک  پیغام به صورت toast به مدت 5000 ثانیه نمایش داده می شود.

برای توقف تایمر هم از قطعه کد زیر استفاده می نماییم:

public void stoptimertask(View v) {
    //stop the timer, if it's not already null
	    if (timer != null) {
	        timer.cancel();
	        timer = null;
	    }
}

قطعه کد بالا تضمین می کند که تایمر هنوز کنسل نشده است، و بعد timer کنسل می شود.

ما باید یک مقدار اولیه به تابع اصلی timer task بدهیم که در خط زیر آن را قرار می دهیم:

public void initializeTimerTask() {
	     
	    timerTask = new TimerTask() {
	        public void run() {
	             
	            //use a handler to run a toast that shows the current timestamp
	            handler.post(new Runnable() {
                public void run() {
	                    //get the current timeStamp
	                    Calendar calendar = Calendar.getInstance();
	                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd:MMMM:yyyy HH:mm:ss a");
	                    final String strDate = simpleDateFormat.format(calendar.getTime());
	                 
	                    //show the toast
	                    int duration = Toast.LENGTH_SHORT; 
	                    Toast toast = Toast.makeText(getApplicationContext(), strDate, duration);
	                    toast.show();
	                }
	            });
	        }
	    };
	}

درقطعه کد بالا ما از یک پیغام toast استفاده می نماییم، که این پیغام زمان و تاریخ را برای ما نمایش می دهد.

خروجی به صورت زیر خواهد بود:

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید