میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

کلاس Handler در اندروید

ابتدا جهت پیاده سازی مفهوم همروندی در موبایل و ایجاد یک thread دیگر سوای thread اصلی ، می بایست یک آبجکت از کلاس Thread ایجاد نمایید. سپس می توانید با کمک کلاس های handler و Message خروجی thread پس زمینه را به thread اصلی اطلاع دهید.

آبجکت Handler خود را داخل thread ای که در آن ایجاد می شود، ثبت می نماید. این آبجکت یک پل ارتباطی ایجاد کرده و داده ها را از طریق آن به thread اصلی تحویل می دهد. به طور مثال، اگر شما یک نمونه ی جدید از Handler در متد () onCreate کلاس activity خود ایجاد نمایید، در آن صورت می توانید از آبجکت ذکر شده به راحتی داده های مورد نیاز را به thread اصلی ارسال نمایید. داده هایی که کلاس Handler ارسال می کند، می تواند آبجکتی از کلاس Message یا Runnable باشد .

Handler به ویژه در شرایطی کارامد تلقی می شود که لازم باشد داده هایی را چند بار به thread اصلی ارسال (post) نمایید.

 


ایجاد و استفاده ی مجدد از thread اصلی

به منظور پیاده سازی کلاس handler ، می بایست یک کلاس فرزند ( subclass ) از آن ایجاد کرده و متد () handleMessage آن را جهت پردازش پیغام ها بازنویسی ( override ) نمایید. سپس می توانید به راحتی با فراخوانی توابع  (sendMessage(Message یا () sendEmptyMessage پیغام های مورد نیاز را به آن ارسال کنید. جهت ارسال یک آبجکت Runnable به کلاس مذکور، لازم است متد ()post را بکار ببرید.

به منظور جلوگیری از ایجاد غیر ضروری آبجکت و اشغال حافظه، می توانید آبجکت Handler جاری کلاس activity خود را مجددا استفاده یا به اصطلاح بازیافت نمایید.

 

// Reuse existing handler if you don't
// have to override the message processing
handler = getWindow().getDecorView().getHandler();

 

کلاس View به شما این امکان را می دهد تا آبجکت هایی از جنس Runnable را به وسیله ی متد () post ارسال (post) نمایید (این متد به شما امکان می دهد تا پیغام پایان کار را به thread اصلی اعلان نمایید).


مثال
کد زیر نحوه ی استفاده از یک handler از view را نمایش می دهد. فرض کنید activity شما از فایل layout زیر جهت تنظیم ظاهر خود استفاده می کند.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="false"
android:max="10"
android:padding="4dip" >
</ProgressBar>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" >
</TextView>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="startProgress"
android:text="Start Progress" >
</Button>
</LinearLayout>  

با توجه به کد activity زیر که برای برنامه نوشته شده، زمانی که کاربر بر روی دکمه یا آبجکت Button کلیک می کند، آبجکت ProgressBar بلافاصله بروز رسانی می شود.

 

package de.vogella.android.handler;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
public class ProgressTestActivity extends Activity {
private ProgressBar progress;
private TextView text;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
progress = (ProgressBar) findViewById(R.id.progressBar1);
text = (TextView) findViewById(R.id.textView1);
}
public void startProgress(View view) {
// do something long
Runnable runnable = new Runnable() {
@Override
public void run() {
for (int i = 0; i <= 10; i++) {
final int value = i;
doFakeWork();
progress.post(new Runnable() {
@Override
public void run() {
text.setText("Updating");
progress.setProgress(value);
}
});
}
}
};
new Thread(runnable).start();
}
// Simulating something timeconsuming
private void doFakeWork() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

 


امیدواریم آموزش کلاس Handler در اندروید نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.
ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟