المشاركات

Specifying the Code to Run on a Thread - المعالجة الموازية

في هذا الدرس سوف نرى كيف ينفذ Runnable وتشغيل الكود في thread منفصل , نستطيع ارسال runnable وربطه مع thread ويتم تشغيله , كل واحد من runnable يسمى task  thread و runnable هي كلاس بسيط محدود القوة ولكنه يعتبر الاساس للاكثر قوه في نظام الاندرويد مثل handler , acyncTask , intentservice و الrunnable هي الاساس ايضا الى كلاس ThresdPoolExecutor (هو كلاس يدير عملية thread و مهام Queue و يستطيع تشغيل multiple thread متوازية ) تعريف runnable  اما من خلال تعريف كلاس وتضمينه داخلة  public class PhotoDecodeRunnable implements Runnable {     ...     @Override     public void run () {         /*          * Code you want to run on the thread goes here          */         ...     }     ... } او من خلال استخدام lambda في لغه كوتلن: Runnable  { * Code you want to run on the thread goes here }  لا يمكن الو...

Delayed Loading of Views - تأخير تحميل الواجهات

في بعض الحالات نحتاج الى استخدام view معقدة ولكن  نادرا ما نستخدمها حيث يمكن تسريع عمليه التحميل وتقليل استهلاك الذاكرة من خلال عرض ال veiw عند الحاجة اليها فقط وهذه تعد تقنية مهمه عند وجود views معقدة ويمكن استخدام هذه التقنيه بستخدام viewStub ViewStub   هو view خفيف لا يحتوي على ابعاد ولا على رسم داخل layout حيث تكون سهله inflate و سهله المغادرة من التسلسل الهرمي لل layout  وهي تحتاج الى andorid:layout لاضافه layout  Load the ViewStub Layout   يمكن تحميل بواسطة inflater او setVisibility  findViewById ( R . id . stub_import )). setVisibility ( View . VISIBLE ); // or View importPanel = (( ViewStub ) findViewById ( R . id . stub_import )). inflate ();  viewStub لا يعد جزء من التسلسل الهرمي  viewStub لا تدعم <merg/> في التضمين

Re-using Layouts - اعاده الاستخدام

لاعادة استخدام layout بكفائة يمكن استخدام <include/> و<merge/> لتضمين layout داخل layout الحالية اعاده الاستخدام قوي جدا لانه يسمح لك بتصمين layout معقده بدلا من اعادة اضافتها في كل الواجهات مثال : نريد تضمين هذه layout <FrameLayout xmlns:android = "http://schemas.android.com/apk/res/android"     xmlns:tools = "http://schemas.android.com/tools"     android:layout_width = "match_parent"     android:layout_height = "wrap_content"     android:background = "@color/titlebar_bg"     tools:showIn = "@layout/activity_main" >     <ImageView android:layout_width = "wrap_content"                 android:layout_height = "wrap_content"                 android:src = "@drawable/gafricalogo" /> </FrameLayout>  ملاحظة: tools:showIn تستخدم وقت التصميم فقط لاضهار هذه layout في واجهات اخرى لغرض التعديل  ا...

Improving Layout Performance - تحسين اداء الواجهات

صورة
layout هي مفتاح تطبيقات الاندرويد التي لها تأثير مباشر على تجربة المستخدم UX اذا كانت سيئة التنفيذ يمكن ان تؤدي الى استهلاك الذاكرة وهنا سوف نتكلم عن كيف تكون الواجهات سلسة وتاخذ مساحة قليلة من الذاكرة الدرس الاول    1. تحسين التسلسل الهرمي للواجهات - Optimizing Layout Hierarchies هو نفس فكره صفاح الويب المعقدة تأخذ وقت في التحميل , فأن التسلسل الهرمي اذا كان معقد جدا يمكن ا يسبب مشاكل في الاداء  من المفاهيم الخاطئه الشائعة الن استخدام layout بسيطة يؤدي الى كفاءه اكثر  على كل حال عند layout او widget تظيفها الى التطبيق الخاص بك تتطلب تهيئه و تخطيط و رسم مثلا عند انشاء linearLayout متداخلة هذا يودي الى تسلسل هرمي عميق للغاية وعلاوة على ذلك عند استخدام مثلا layout_weight يمكن ان يكون مكلف جدا حيث يحتاج كل layout ابن لقياس مرتين وخاصتا  عند استخدام layoutInflater مرارا وتكرارا 1. فحص الواجهات  يحتوي android SDK على اداة hierarvhy view تساعد على تحليل layout عند تشغيل التطبيق تستخدم لاكتشاف الاخطاء واختناقات الاداء   تعمل ه...

Performance Tips نصائح الاداء

نغطي هنا بعض التحسينات التي يمكن ان تؤدي الى تحسن اداء التطبيق بشكل عام ولكن من غير المحتمل ان تودي هذه تغييرات كبيرة , يجب اختيار الخوارزميات وهياكل البيانات الصحيحة ولها الاولوية دائما . هناك نوعين من القواعد الاساسية لكتابة كود فعال  : لا تقم بعمل لا تحتاج الى القيام به  لا تقم بتخصيص الذاكرة اذا كنت تستطيع تجنب ذلك   تعد واحدة من اصعب المشاكل التي ستواجهها هو ان من المؤكد ان تطبيقك يعمل على انواع متعددة من الاجهزة واصدارات مختلفة حيث يمكن ان يكون هناك فارق في السرعة من جهاز الاخر وان التطبيق الذي يعمل عندك بسرعة ليس دائما هو الافضل لضمان اداء التطبيق بشكل جيد عبر مجموعة من الاجهزة تأكد من ان الشفرة فعالة علي جميع المستويات وقم بتحسين الاداء بشكل فعال   1. تجنب انشاء كائنات غير ضرورية  انشاء الكائن غير مجاني لان تخصيص الذاكرة يكون اكثر تكلفة من عدم تخصيص الذاكرة ولذلك تجنب انشاء كائنات لا تحتاج اليها وهذه بعض الامثلة : - اذا كانت هناك fun تعيد string و يضاف الي StringBuffer دائما وانت متاكد من ذلك غير الدالة والحق string مباشرتا الى ...