بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

مشکل در اجرای ترد در هر چند ثانیه

مدیریت گفتگو
mortex 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام. من میخوام یک کد خاص رو با استفاده از ترد در هر چند ثانیه یکبار اجرا کنم اما مشکلی که هست اینه که با هر بار اجرای اون اکتیویتی یک بار به تعداد دفعات اجرای اون کد اضافه میشه و در بار سوم ، سه بار کد مورد نظرم در اون بازه زمانی اجرا میشه. این هم کدی که نوشتم: این کد در متد onCreate نوشته شده:

         mHandler = new Handler();
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(5000);
                        mHandler.post(new Runnable() {

                            @Override
                            public void run() {
//my code Toast.makeText(getApplicationContext(), "mycode", Toast.LENGTH_LONG).show(); } }); } catch (Exception e) {} } } }).start();

نظرات

mortex 11 سال پیش
دوستان کسی در اینباره نظری ندارن
Saeed Mozaffari 11 سال پیش
اینطور که من متوجه شدم با هر بار اجرای اکتیویتی ای که Thread داخلش هست یه نمونه جدید از Thread ساخته میشه و چند تا Thread با هم کار میکنن. خب اگر اینطور هست شما یه متغییر boolean تعریف کنید و با اولین باری که Thread اجرا شد اون متغییر رو مثلاً false بکنید تا دفعات بعد که اکتیویتی اجرا شد دیگه Thread شما مجدداً ساخته نشه.
mortex 11 سال پیش
خب با false کردن ترد از بین که نمیره، باز هم ترد قبلی هست و با اجرای ترد بعدی دو تا میشن و ...

پاسخ‌ها 1

Saeed Mozaffari 11 سال پیش

مثلاً یه چنین چیزی باشه . Thread داخل یه دستور شرطی باشه . و دفعات بعد دیگه کلاً Thread جدید ساخته نشه.

       boolean a = true;
if (a == true) {
a = false;
Thread thread = new Thread(new Runnable() {

@Override
public void run() {

}
});
thread.start();
}

البته متغییر boolean رو باید یه جایی بزاری که هر مرتبه مجدداً true نشه مقدارش.

نظرات

Criss 11 سال پیش
بهتره که متغییر boolean در کلاس G یا ActivityEnhanced ساخته بشه بصورت public static

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .