آموزش برنامه نویسی اندروید (Android)
۴۱۹ آموزش
نمایش دسته بندی ها (۴۱۹ آموزش)

اجرای یک سری کد، به صورت هر چند ثانیه یک بار (مثلا هر 5 ثانیه یک بار)، با ساخت یک thread جدید، در برنامه نویسی اندروید

فرض کنید که قصد داریم یک سری کد، هر 5 ثانیه یک بار اجرا شوند. برای این منظور، چون نمی خواهیم که thread اصلی (main thread) برنامه، دچار اختلال شود، باید این عملیات را در یک thread جدید انجام بدهیم.

ابتدا در Activity مورد نظرمان، کدهای زیر را می نویسیم :


public Handler mHandler;
public boolean continue_or_stop;

سپس در روش مورد نظرمان از Activity (مثلا در روش onCreate)، باید کدهای زیر را بنویسیم :


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();

به عنوان مثال، کدهای کامل در یک Activity ، می تواند مشابه کدهای زیر باشد :


package com.kelidestan.newclass;

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 ثانیه می باشد و شما می توانید آن را به دلخواه تغییر بدهید).

نویسنده علیرضا گلمکانی
شماره کلید 2861
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 6 6 0
حسین
۱۳۹۶/۰۴/۰۱
۱۵:۵۳

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

مهدی
۱۳۹۶/۰۶/۱۶
۰۳:۲۱

وقتی مزارمش تو تابع و چند بار صداش میزنم یهو سرعتش خیلی میره بالا و رو 5 ثانیه نمیمونه
اگه میشه راهنماییم کنید
پ.ن:کار فعلیش تموم میشه و دوباره صداش میزنم(رو هم صداش نمیزنم)

arian
۱۳۹۷/۰۹/۰۲
۰۰:۲۱

سلام خسته نباشیذ ببخشید چطوری میشه اون تایمر رو خاموش کرد توسط یک دکمه دیگر؟

mori khaste
۱۳۹۸/۰۷/۱۲
۱۷:۰۱

continu ro false kon

danieldd
۱۳۹۸/۰۵/۲۱
۰۲:۲۱

سلام
به تیکه کد    mHandler.post    ایراد میگیره قسمت post قرمز میشه ....

داود
۱۳۹۸/۰۹/۱۰
۲۱:۲۱

سلام. این کد یک مشکلی که داره این هست که هر عملی رو دو بار تکرار می کنه...

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)