Timer Task در اندروید
جمعه 30 بهمن 1394در این مقاله با استفاده از متد java.util می خواهیم یک ativity یا action را در یک دوره ی زمانی مشخص یک پیغام toast را به کاربر نمایش دهد.در این مثال از یک کلاس 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 استفاده می نماییم، که این پیغام زمان و تاریخ را برای ما نمایش می دهد.
خروجی به صورت زیر خواهد بود:
- Android
- 3k بازدید
- 3 تشکر