ورود

View Full Version : مشکل در درک عملکرد handler



karimi72
جمعه 30 خرداد 1393, 23:31 عصر
دوستان من به تازگی شروع به یادگیری برنامه نویسی اندروید کرده ام و در درک قطعه کد زیر به مشکل بر خورده ام

_progressHandler=new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
if(_progress>=100){
_progressDialog.dismiss();
}
else{
_progress++;
_progressDialog.incrementProgressBy(1);
_progressHandler.sendEmptyMessageDelayed(0,100);
}

}


};


مشکل من برای این قطعه کد این است که: در بخشی که به متغییر _progressHandler حافظه اختصاص داده است آمده است و یک بلاک ایجاد کرده و یکی از متد های کلاس handler را لغو کرده است این یعنی چه ؟ چگونه می شود در این جا کلاسی ایجاد نکرده ایم که و از handler ارث بری نشده است چگونه برای یک شی خاص این کار صورت گرفته)؟
و اینکه لطفا در باره عملکرد کلاس handler یک توضیح دهید.

parvizwpf
شنبه 31 خرداد 1393, 02:03 صبح
خب این خاصیتی جالب ار جاوا هست. در واقع هنگام ساخت آبجکت ، میتوان برای آن آبجکت فراخوانی متد مربوط به آن کلاس انجام داد. منظورتون از لغو رو نفهمیدم.

http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html

karimi72
شنبه 31 خرداد 1393, 08:41 صبح
من این پستی که شما گداشته اید را خوانده ام.
دوست عزیز handler یک کلاس است (abstract هم نیست ) حال اگر من یک یک شی ازآن بسازم آن شی باید تمام از متد هایی را که در کلاسش هست یک نمونه داشته باشید بدون تغییر ولی در این جا یک handler تعریف کرده است ولی handleMessage را نیز به صورت صریح مشخص کرده است مشکل من در فهم این بخش است مگر چنین چیزی ممکن است ؟ که متدی را بدون وراثت لغو کنیم ؟

dasssnj
شنبه 31 خرداد 1393, 09:13 صبح
بله . ممکنه.
شما توی اون شی متد handleMessage را اورراید کردید . مشکلی نیست . مثل این می مونه:

Object s = new Object() {


@Override
public String toString() {
return "Overrided";
}


};
System.out.println(s);



اینجا هم من متد toString را لغو کردم.
این یه قابلیت قشنگ جاواست که میشه متد ها را توی شئ هم لغو کرد.

karimi72
شنبه 31 خرداد 1393, 22:49 عصر
بله . ممکنه.
شما توی اون شی متد handleMessage را اورراید کردید . مشکلی نیست . مثل این می مونه:

Object s = new Object() {


@Override
public String toString() {
return "Overrided";
}


};
System.out.println(s);



اینجا هم من متد toString را لغو کردم.
این یه قابلیت قشنگ جاواست که میشه متد ها را توی شئ هم لغو کرد.

پس وقتی من handler را فراخوانی می کنم تابع handleMessage فراخوانی می شود و دستوراتش را اجرا می کند. درست می گویم؟
امکان این هست که چندین Message را در یک handler قرار بدهم؟

dasssnj
یک شنبه 01 تیر 1393, 08:21 صبح
منظورتون از فراخوانی هندلر چیه؟خوب نفهمیدم.

karimi72
یک شنبه 01 تیر 1393, 14:50 عصر
فراخوانی یکی از توابعی مثل sendemptymessage