قد يكون أول ما يخطر ببال مبرمج Java أو C عندما يرى كود تطبيق Android لأول مرة، “أين دالة main ؟ ”
في البرامج المكتوبة بالجافا لأجهزة الكمبيوتر من الطبيعي أن نجد دالة main التي توضح كيف يبدأ تنفيذ البرنامج
تكوين الـ Android مختلف بعض الشئ وذلك يرجع لإختلاف طبيعة البيئة المخاطبة بتنفيذ التطبيق، فنحن نعلم أن الـ hardware الذي سينفذ هذا التطبيق سواء كان mobile phone أو tablet أو embedded system هو أقل من الـ hardware الموجود بجهاز الكمبيوتر الذي ينفذ البرامج المكتوبة بـ Java أو C أو غيرهما
لذلك لا تحتوي تطبيقات الأندرويد دالة main، ولكن تطبيقات الأندرويد قد تستخدم أجزاء من تطبيقات أخرى، وذلك دون الحاجة لتحميل هذه التطبيقات بالكامل، يستطيع مبرمجي الأندوريد إستغلال تلك القدرة في تصميم تطبيقات تستطيع القيام بوظائف كبيرة بإستغلال resources قليلة، ينطبق عليها مقولة (lean and mean)
نستطيع تنفيذ ذلك ببناء التطبيق من 4 مكونات رئيسية، عبارة عن Java Classes، نستعرض سريعا هذه المكونات الأربع، وندقق النظر قليلا على أولهم
1- Activity Class
هي الواجهة المرئية التي يتعامل معها المستخدم، تمكنه من إرسال وإستقبال البيانات مع التطبيق، مثل الواجهة الرئيسية لأي تطبيق
على سبيل المثال الـ phone dialer
المكونات الثلاثة الأخرى تعمل في الخلفية لذلك ليس لها user interface :
2- Services
هي المسئولة عن العمليات الطويلة والعمليات التي تعمل في الخلفية مثل music player حيث بإمكانك أن تترك الملف الصوتي يعمل في حين أنك تستخدم تطبيق آخر مثل تصفح البريد أو غيره
3- Broadcast receiver
هي المسئولة عن الإنصات والرد على الـ events التي تحدث على الجهاز، مثل تطبيقات الدردشة أو الرسائل التي تنتظر وصول رسالة جديدة لإظهار تنبيه
4- Content Provider
هي التي تُمكن التطبيقات المختلفة من تخزين ومشاركة البيانات، مثل تطبيقات الـ web browsers فهي تملك bookmarks التي يستطيع المستخدم الإضافة والحذف منها
[divider scroll_text=””]
نتكلم بتوسع أكثر قليلا عن الـ Activity Class
كل Activity مختصة بوظيفة واحدة يستطيع المستخدم القيام بها مثل تسجيل الدخول أو إرسال رسالة ..
يمكن تشبيه الـ Activity ببطاقات الكوتشينه المرتبة فوق بعضها :
بطاقة واحدة هي التي تظهر
بطاقة واحدة هي الفعّالة
عند وضع بطاقة جديدة فإنها تكون في المقدمة
كل تطبيق في الغالب يتكون من عدة Activities
الـ Activity تستطيع أن تشغل Activity أخرى في تطبيق آخر
بعض المفاهيم الهامة :
Tasks
هي عبارة عن مجموعة من الـ activities التي يتفاعل المستخدم معها وليس شرطًا أن تكون من نفس التطبيق
Task Backstack
عندما تبدأ Activity جديدة فإنها تتصدر مقدمة الـ Task Backstack وعند إغلاق Activity فإنها تغادر الـ Task Backstack
مصدر الصورة : http://developer.android.com/guide/components/tasks-and-back-stack.html
[divider scroll_text=””]
Activity LifeCycle
عند بدء Activity جديدة فإنها تتصدر مقدمة Task Backstack كما ذكرنا سابقًا وتصبح هي الـ Activity الفعّالة، أما الـ Activity التي كانت فعالة قبلها فأنها تكون خلفها في الـ Task Backstack
نستعرض بعض الدوال الهامة التي تمثل ما نستطيع أن نطلق عليه دورة حياة الـ Activity :
OnCreate():
يتم إستدعاء هذه الدالة عند بداية بناء الـ Activity ، تقوم بإظهار الـ UI على سبيل المثال
وتنتقل الـ Activity بعدها لتشغيل دالة :()OnStart
OnResume():
يتم إستدعاء هذه الدالة عندما تظهر الـ Activity مرة أخرى بعد أن توقفت
OnPause():
يتم إستدعاء هذه الدالة عندما تتوقف الـ Activity وتصبح غير فعالة نتيجة لإختفائها وظهور Activity أخرى، وفيها يتم حفظ حالة الـ Activity حتى يعود كما كان قبل أن يتوقف عندإعادة تشغيل الـ Activity
مصدر الصورة : http://developer.android.com/reference/android/app/Activity.html
لتوضيح هذه الحالات برمجيا يمكن استعراض هذا الكود الذي يوضح كل حالة بـ Logcat الذي يستخدم في الـ debugging :