ورود

View Full Version : Thread و Handler



ali_khodayar
شنبه 10 مرداد 1394, 14:47 عصر
سلام دوستان عزیز.
کسی میدونه فرق این دو کد چیه؟؟ اصلأ چه فرقی بین Thread و Handler وجود داره؟؟؟ توی اینترنت گشتم خوب متوجه نشدم.

من توی این دو کد مشکل دارم.



final Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// Do SomeThings
}
};




و



private class readThread extends Thread
{
Handler mHandler;


readThread(Handler h){
mHandler = h;
this.setPriority(Thread.MIN_PRIORITY);

}


@Override
public void run()
{

}
}


و زمانی که به اینصورت صدا زده میشه اول کدوم اجرا میشه بعد کدوم اجرا میشه؟؟ ترتیب به چه صورته؟؟



read_thread = new readThread(handler);
read_thread.start();


واقعأ فهم این قسمت برام مشکله . اگر توضیح بدید ممنون میشم و یا اینکه اگر مقاله خوب در این مورد هست معرفی کنید.

کار Thread چیه؟؟ کار Handler چیه؟؟ فرق بینشون چیه؟؟؟ :افسرده:

Nevercom
شنبه 10 مرداد 1394, 16:43 عصر
در این کد، کلاس readThread هنگام اجرای متد run کدهای درون اون رو در یک ترد دیگه اجرا می کنه، همون چیزی که نیاز داریم تا برنامه مون خوب کار کنه.
اما احتمالاً نیاز داریم که وقتی ترد کارش تموم شد (یا در هر زمان دیگه ای بین شروع و پایان کار ترد) از وضعیت انجام اطلاع پیدا کنیم و داده ی نهایی که مدنظرمون هست رو بدست بیاریم.

برای این منظور ورودی Constructor این کلاس، Handler هست.

هندلر اینجا نقش واسظه رو داره، شما یک شئ از این نوع ایجاد می کنید و میفرستیدش به اون کلاس، و کلاس readThread از این شئ استفاده می کنه تا پیغام ها رو برای شما پس بفرسته (هر وقت پیغامی دریافت کردی، متد handleMessage صدا زده میشه).
و البته هندلر تضمین میده که این پل ارتباطی که بین دو ترد مجزا ایجاد شده، مشکلی بوجود نمیاره.

Ruhallah.Ahmadian
یک شنبه 11 مرداد 1394, 00:45 صبح
Handler برای ایجاد ارتباط activity با thread هستش شاید لازم باشه از activity ی سری اطلاعات بفرستی برای thread

ali_khodayar
یک شنبه 11 مرداد 1394, 11:02 صبح
با تشکر از دو دوست عزیز ، مطلب برام خیلی واضح تر و قابل درک شد.

توی متد Run() یک تکه کدی هست


Message msg = mHandler.obtainMessage();
mHandler.sendMessage(msg);


کار این قسمت چیه؟؟ تا اونجایی که من متوجه شدم زمانی که کار متد Run() تمام میشود ، این قسمت پیامی ارسال میکنه که کار Thread تمام شده است. درسته؟؟

امکانش هست که بازهم در مورد Thread و Handler بیشتر توضیح بدید؟؟ ممنون میشم.
اولویت اجراشون هم برام مهمه که . چون من دارم از یک سخت افزار مقادیری رو میخونم .

Nevercom
یک شنبه 11 مرداد 1394, 21:28 عصر
درواقع شما میخواید با Handler یک پیامی رو به ترد اول (مثلاً اون اکتیویتی ای که کدها رو اجرا کرده) بفرستید.

همونطور که گفتم Handler پیام شما رو میگیره و میفرسته به ترد اصلی و اون رو در یک صف قرار میده که وقتی نوبتش رسید تحویل داده بشه.

توی تکه کدی که گذاشتید اول یک پیام برای ارسال آماده می کنید (خط اول)
و در خط دوم اون پیام رو به Handler ارسال می کنید، البته احتمالاً یک خط کد دیگه هم نیاز خواهید داشت بین این دو

msj.obj = "Hello";
درواقع شما دارید پیام خاص خودتون رو ارسال می کنید.

جنس پیام هم هرچیزی میتونه باشه، فقط تو متد handleMessage باید به نوع مناسب Castش کنید
@Override
public void handleMessage(Message msg)
{
Strng message = (String) msg.obj;
}