انشاء الخيط الحاسوبي
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
في الدرسين السابقين تعرفنا على الخيوط الحاسوبية ومكوناتها, والان جاء الوقت في هذا الدرس لإنشاء اول خيط حاسوبي لنا. ففي هذا الدرس سنقوم بعمل خيط حاسوبي خاص بنا عن طريق الوراثه باستخدام كلاس الـ Thread وفي مثال اخر بعمل implements للواجهة الـ Runnable واخيراً بمثال سريع لإنشاء الخيط. ليصبح لدينا ٤ خيوط حاسوبية (لاتنسى ان الخيط الاول نظام الاندرويد ينشئه لتطبيقنا ويسمى بالـ Main Thread او بالـ UI Thread).
انظر في الصورة كيف ان الـ Handler يستلم الشفرة البرمجية من التطبيق المغلفة بداخل الـ Runnable ثم يغلفها بداخل Message ويرسلها الى الـ Message Queue لتوضع على الخيط الحاسوبي متجهه الى احد الانويه (Core) التي تدعم الخيوط (Thread) للمعالج ليتم معالجتها. لاحط ايضاً دور الـ Looper في تشغيل هذا الخيط وسيره الى الامام.
انشاء خيط حاسوبي بإستخدام كلاس الـ Thread
الخطوات:
نقوم بإنشاء كلاس جديدة ولتكن بأسم MyThread ونعمل extends لكلاس الـ Thread الموجودة في الـ Android SDK كالتالي:
public class MyThread extends Thread {}
نقوم بعمل Override للدالة run وبداخلها نضع الشفرة البرمجية المراد تشغيلها على هذا الخيط, كالتالي:
@Override
public void run() {
super.run();
Log.d(TAG, "run: I'm running from Thread -> " + Thread.currentThread().getName());
}
من اين جائت دالة الـ run؟ جائت من الـ Runnable! لو قمت بقرائة كلاس الـ Thread الموجودة في الـ Andriod SDK للاحظت انها تقوم بعمل implements للواجهة Runnable التي بدورها تحتوي على الدالة run.
لتصبح الكلاس كاملة على النحو التالي:
public class MyThread extends Thread {
private static final String TAG = "MyThread";
@Override
public void run() {
super.run();
Log.d(TAG, "run: I'm running from Thread -> " + Thread.currentThread().getName());
}
}
ولتشغيل هذا الخيط من الـ Activity ننشئ عنصر لها ونستدعي الداله start له:
MyThread myThread = new MyThread();
myThread.start();
انشاء خيط حاسوبي بإستخدام الواجهة الـ Runnable
في المثال السابق رأينا كيفية عمل خيط حاسوبي باستخدام كلاس الـ Thread بدون الحاجة لواجهة Runnable (لإنها تقوم بعمل impelment لها بشكل implicit اي غير ظاهري). في هذا المثال سنقوم بعمل نفس الشئ ولكن باستخدام الواجهة Runnable (بشكل explicit اي ظاهر).
الخطوات:
نقوم بعمل كلاس جديدة ولتكن بأسم MyRunnable ونعمل implements للواجهة Runnable الموجودة في الـ Android SDK كالتالي:
public class MyRunnable implements Runnable {}
نقوم بعمل Override للدالة run وبداخلها نضع الشفرة البرمجية المراد تشغيلها على هذا الخيط, كالتالي:
@Override
public void run() {
Log.d(TAG, "run: I'm running from Thread -> " + Thread.currentThread().getName());
}
لتصبح الكلاس كاملة على النحو التالي:
public class MyRunnable implements Runnable {
private static final String TAG = "MyRunnable";
@Override
public void run() {
Log.d(TAG, "run: I'm running from Thread -> " + Thread.currentThread().getName());
}
}
ولتشغيل هذا الـ Runnable نحتاج لإنشاء خيط حاسوبي حتى يمر عليه الى المعالج كالتالي (في الـ Activity):
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
نستطيع ايضاً تشغيلة بشكل متأخر, وذلك بتحديد وقت Delay لوضعه على الخيط الحاسوبي باستخدام الـ Handler.
Handler handler = new Handler();
handler.postDelayed(myRunnable, 5000);
انشاء خيط حاسوبي بشكل مختصر
نستطيع انشائها ايضاً بشكل مختصر في اي مكان هكذا:
new Thread(new Runnable() {
@Override
public void run() {
Log.d(TAG, "run: I'm running from Thread -> " + Thread.currentThread().getName());
}
});
اي الطرق اختار؟ من الافضل اختيار الطريقة التي تقوم بعمل implements للواجهة Runnable. لماذا؟ حتى تتمكن من استخدام الوراثه اذا احببت! فمن المعلوم ان في لغة الجافا لاتستطيع الوراثه الا من كلاس واحدة فقط.
رأينا في هذا الدرس كيفية صناعة الخيوط الحاسوبية بأستخدام الكلاس الـ Thread واخرى باستخدام الواجهة Runnable وايضاً طريقة مختصرة لصنع الخيط الحاسوبي. في الدروس القادمة سنرى الانماط المشهورة في برمجة الاندرويد لصناعة الخيوط الحاسوبية والتي تمتاز بالمرونه لصناعة تطبيق محكم بعيداً عن مشاكل المزامنه وماشابه ذلك اذا طبقت بشكل سليم.
رابط الكلاسات المستخدمه في هذا الدرس:
- تم إستخدام كلاس MyThread.java و MyRunnable.java في كلاس الـ MainActivity.java.
للحصول على رابط المشروع راجع درس المقدمة.
المصادر والمراجع
للمزيد راجع درس المقدمة.
نهاية الدرس
لاتنسى تتبع الدرس والدورة كذلك لإشعارك عندما يتم التعديل على المتحوى او اضافة المزيد من المعلومات. ايضاً لاتنسى الاعجاب بالدرس ومشاركته مع الاخرين.
محتوى الدورة
الكلمات الدليلية
عن الدرس
0 إعجاب |
1 متابع |
0 مشاركة |
2707 مشاهدات |
منذ 5 سنوات |
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !