اجرای یک سری کد، به صورت هر چند ثانیه یک بار (مثلا هر 5 ثانیه یک بار)، با ساخت یک thread جدید، در برنامه نویسی اندروید
فرض کنید که قصد داریم یک سری کد، هر 5 ثانیه یک بار اجرا شوند. برای این منظور، چون نمی خواهیم که thread اصلی (main thread) برنامه، دچار اختلال شود، باید این عملیات را در یک thread جدید انجام بدهیم.
ابتدا در Activity مورد نظرمان، کدهای زیر را می نویسیم :
public boolean continue_or_stop;
سپس در روش مورد نظرمان از Activity (مثلا در روش onCreate)، باید کدهای زیر را بنویسیم :
continue_or_stop = true;
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while (continue_or_stop) {
try {
Thread.sleep(5000); // every 5 seconds
mHandler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// your codes
// you can set continue_or_stop to false, for stop
}
});
} catch (Exception e) {
// TODO: handle exception
}
}
}
}).start();
به عنوان مثال، کدهای کامل در یک Activity ، می تواند مشابه کدهای زیر باشد :
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;
public class MainActivity extends Activity {
public Handler mHandler;
public boolean continue_or_stop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHandler = new Handler();
continue_or_stop = true;
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while (continue_or_stop) {
try {
Thread.sleep(5000); // every 5 seconds
mHandler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// your codes
// you can set continue_or_stop to false, for stop
}
});
} catch (Exception e) {
// TODO: handle exception
}
}
}
}).start();
}
}
کدهای مورد نظرمان که قصد داریم هر 5 ثانیه یک بار، اجرا شوند را باید به جای عبارت // your codes بنویسیم. تکرار شدن اجرای کدها تا زمانی ادامه می یابد که متغیر continue_or_stop برابر true باشد (زیرا یک حلقه while بر اساس مقدار آن ساخته ایم)، بنابراین برای توقف تکرار اجرای کدها، باید مقدار متغیر continue_or_stop را به false تغییر بدهیم.
مدت زمان برای تکرار اجرای کدها، بر حسب میلی ثانیه تعیین شده است (عدد 5000 بیانگر 5 ثانیه می باشد و شما می توانید آن را به دلخواه تغییر بدهید).
سلام
بسیار بسیار عالی واقعا دست مریزاد
یکی از بهترین سایت های ایرانی کلیدستان هست
وقتی مزارمش تو تابع و چند بار صداش میزنم یهو سرعتش خیلی میره بالا و رو 5 ثانیه نمیمونه
اگه میشه راهنماییم کنید
پ.ن:کار فعلیش تموم میشه و دوباره صداش میزنم(رو هم صداش نمیزنم)
سلام خسته نباشیذ ببخشید چطوری میشه اون تایمر رو خاموش کرد توسط یک دکمه دیگر؟
continu ro false kon
سلام
به تیکه کد mHandler.post ایراد میگیره قسمت post قرمز میشه ....
سلام. این کد یک مشکلی که داره این هست که هر عملی رو دو بار تکرار می کنه...