مقالات تخصصي طراحي اپ موبايل مرجع رسمي مقالات طراحي اپليكيشن
|
توسعه و گسترش دهندگان اندرويد در زمان ساختن نرم افزار هاي اندرويدي با بحران هاي رايجي مانند مدير چرخه حيات حادثه ها، مرحله مراقبت و ذخيره سازي اطلاعات مواجه ميشوند. اين كارداران سبب ساز مشقت بسط نرم افزار اندرويدي ميشوند. براين اساس دراين نوشتهعلمي تشكيل داد نرم افزار هاي امروزي با به كارگيري از معماري كامپوننت ها در اندرويد را تحقيق خواهيم كرد. خوشبختانه مجموعه اندرويد، معماري كامپوننت ها را يار با شيوه نامه ها و پند ها براي حل ايرادات رايج در زمان ايجاد كرد نرم افزار اندرويدي دراختيار گسترش دهندگان گذارده ميباشد. معماري كامپوننت ها چيست؟ باتوجه به گفته هاي مجموعه پيشرفت دهنده اين معماري، "معماري كامپوننت ها يك گروه نو از كتابخانه هايي ميباشد كه ياري ميكنند تا شما يك نرم افزار توانمند كه قابليت و امكان آزمايش و مراقبت دارااست را پياده سازي نمائيد. آنان با كلاس هايي كه وظيفه رئيس چرخه حيات اجزاي رابط كاربري شما ومديريت ماندگاري اطلاعات را بر عهده دارا هستند استارت كردند."
درادامه كامپوننت هاي ماژولاري كه ميتوانند با يكديگر يا اين كه جداازهم به كارگيري شوند نقل شده ميباشد: 1- چرخه حيات (LifeCycle) 2- داده زنده (LiveData) 3- سبك نما (ViewModel) 4- اطراف (Room) نكته: يك سري كامپوننت ديگر هم ميباشند كه جديدا منتشر گرديده اند اما ما درباره آنها حرف نميكنيم زيرا در مرحله اول پيشرفت مي باشند.
چرخه حيات (Lifecycle) مدير چرخه حيات يكي بزگترين بحران هاي ايجاد كرد يك نرم افزار اندرويدي ميباشد. در شرايطيكه از فرگمنت ها به كار گيري نمائيد چرخه حيات حتي ميتواند غامض خيس خواهد شد ، به دليل آن كه چرخه حيات آن ها در ورژن هاي متفاوت اندرويد متعدد ميباشد ( اما اين خلل الان بوسيله كتابخانه AppCompat حل گرديدهاست). بريم ببنيم كه كامپوننت چرخه حيات چهطور به ما امداد ميكند تا از بند اين بحران عبور كنيم. Lyfecycle، كلاس ها و اينترفيس هايي را اماده نموده است كه اذن تشكيل داد كامپوننت هاي آگاه از چرخه حيات (lifecycle-aware) را مي دهند كه به طور خود كار كردار خودشان را با چرخه حيات فعلي يك اكتيويتي يا اين كه فرگمنت سازگار ميكنند. اين قابليت و امكان اذن مي دهد كه چرخه حيات براي ساير ابجكت ها قابل مشاهده باشد. اين كامپوننت براي افزودن چرخه هاي حيات غير آگاه(lifecycle-awareness) استعمال مي گردد. اين گزينه براي افرادي كه كتابخانه ميسازند اثرگذار خواهد بود چرا كه مي توانند منابع را باتوجه به چرخه حيات ازاد نمايند. بريم ببينيم چه طور كامپوننت Lyfecycle به ما ياري ميكند. اينجا يك نمونه از اينكه چه گونه يك كد كانال بنويسيم بيان شده ميباشد: override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Network call api.get().onResponse { data -> textView.text = data } }
اين نمونه يك كد بي آلايش كانال ميباشد كه يك درخواست GET به اينترنت ارسال ميكند و جواب ان را در يك TextView تهيه ميكند. معمولي به لحاظ ميرسد، البته اينطور وجود ندارد، چون زماني كه شما دستگاه اندرويدي خويش را بچرخانيد يااينكه از اپليكيشن بيرون گرديد، درخواستي كه به اينترنت پيامبر بوديد همچنان در بك گراند در اكنون اجراست و زماني كه جواب خويش را اخذ ميكند نرم افزار كرش ميكند زيرا ديگرTextViewوجود ندارد چون اكتويتي از ميان رفته ميباشد. بسط دهندگان اندرويد از اين ايراد با خبر مي باشند. براي حل اين نقص، نياز داريم هنگامي كه اكتيويتي از دربين ميرود درخواست را كنسل كنيم مانند كد پايين: override fun onCreate(savedInstanceState: Bundle?) { ///.... // Network call request = api.get() request.onResponse { data -> textView.text = data request = null } }
if (request != null) request.cancel() } كامپوننت Lyfecycle براي حل اينگونه مشكلاتي پياده سازي شدهاست كه با ساختوساز كامپوننت هاي با خبر از چرخه حيات (lifecycle-aware) ( كه از شرايط اكتيويتي آگاه ميباشند) نقص را حل ميكنند. بيايد اين توشه با به كارگيري از كتابخانه Lifecyle نگاهي به به عبارتي تكه كد كنيم: override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Network call api.get().onResponse(getLifecycle()) { data -> textView.text = data } } ساختمان كامپوننت چرخه حيات (Lyfecycle) : اين ساختمان از دو نصيب اساسي ساخته شده ميباشد – صاحبان چرخه حيات (Lifecycle owners) و ناظران چرخه حيات (Lifecycle owners). 1- صاحبان چرخه حيات (Lifecycle owners) در دست گرفتن كنندگان رابط كاربري ميباشند، كه چرخه حيات خودشان را دارا هستند مثل اكتيويتي و فرگمنت. 2- ناظران چرخه حيات (Lifecycle owners) مشاهده گر صاحبان چرخه حيات (Lifecycle owners) مي باشند و هر تغييرو تحول راجع به چرخه حيات انها را اعلان ميكنند. ما از LifecycleObserver براي ساخت و ساز كامپوننت هاي با خبر از چرخه حيات (lifecycle-aware) به كار گيري مي كنيم.
LiveData LiveData براي اين استعمال مي گردد كه بلافاصله تغييرات ساخت گرديده در اطلاعات را به رابط كاربري خبر دهد. ليست ذيل توصيفي ميباشد از LiveData : -يك نگهدارنده داده قابل مشاهده ميباشد. -ناظران را از تغييرات اطلاعات باخبر ميكند براين اساس قادر است رابط كاربري را بروزرساني نمايد. -به چرخه حيات احترام مي گذارد. -خيلي مشابه به RxJava ميباشد. جريان كلي (Overall flow) LiveData كامپوننت هاي رابط كاربري تغييرات را در LiveData مشاهده مي نمايند كه به نوبه خويش در واقع صاحبان چرخه حيات را مشاهده ميكنند از جمله اكتيويتي يا اين كه فرگمنت براي چرخه حيات. اينجا ميگوييم كه LiveData چهگونه شغل ميكند. آغاز بر روي بروزرساني ها و تغييرات در اطلاعات پژوهش مي نمايد. و هنگامي كه مقدار اطلاعات بروز شد در دست گرفتن گر هاي رابط كاربري را نظارت مي نمايد به عنوان مثال اكتيويتي يا اين كه فرگمنت در وضعيت آغاز (started) يا اين كه ادامه (Resumed) باشند.(يعني در واقع رابط كاربري در حالا اكران به يوزرها ميباشد) كه به ناظران استحضار دهد كه رابط كاربري را بروز نمايد. هنوز چيزهايي بيشتري وجود دارااست البته براي بي آلايش خيس شدن اينجانب تنها بروي بخش هاي اصلي كه در صورت 3 امده ميباشد تمركز كرده ام. مزيت هاي كليدي LiveData : -مدام اطلاعات را بروز مي نمايد. -يك چرخه حيات با خبر ميباشد. -به كارگيري از تنظيمات هاي مطلوب با هر تغييراتي. -خودداري از هدررفت خاطر. سبك نما (ViewModel) ViewModel يك محيط براي ذخيره سازي داده هاي مرتبط با رابط كاربريست. كه مشمول داده هاي لازم رابط كاربري ميشود. از جمله، در حالتي كه رابط كاربري مشتمل بر ليستي از ايتم هاي خبري ميباشد، پس ViewModel خبرها را در خويش نگه ميدارد/ذخيره ميكند و در مشت رابط كاربري ميگذارد چنانچه نياز باشد. اين منجر ميگردد كه بخش هاي متفاوت كد از هم غير وابسته شوند (separation of concerns) ، و كنترلگرهاي رابط كاربري (Activity و Fragment) به طور خالص تنها دربرگيرنده كدهاي مختص به رابط كاربري مشوند مانند findViewById, click listeners, manipulating widgets ,... در حالي كه ViewModel دربرگيرنده داده هايي ميباشد كه مي بايست در رابط كاربري به اكران درايند. اين جداسازي اشتباهات عمده اي از بسط دهدگان اندرويد را حل نموده است به عنوان مثال كرش كردن اپليكيشن يا اين كه از دست رفتن اطلاعات در هنگام چرخش دستگاه. ملخص سخن اين ميباشد كه، ViewModel ها تغييرات در تنظيمات را محافظت مي نمايد. يك نمونه:ميخواهيم يك رابط كاربري كه يك ليست از نوشتهعلمي هاي خبري را به اكران مي گذارد را بسازيم. اينجا داده هاي لازم، يك ليست از نوشتهعلمي هاي خبريست. درحالي كه ViewModel چيزي مشابه آنچه كه در ذيل امده ميباشد است: class NewsViewModel() : ViewModel() { private var newsArticles: List init { // Load the data over here newsArticles = .... }
return newsArticles } } class NewsViewModel() : ViewModel() { private var newsArticles: LiveData>
// Load the data over here newsArticles = .... }
return newsArticles } } class NewsActivity: AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_news) // Get ViewModel val newsViewModel = ViewModelProviders.of(this).get(NewsViewModel::class.java)
newsViewModel.getNewsArticles().observe(this, Observer> { // Update the UI }) } }
پشت صحنه: ViewModel وقتي ساخت و ساز ميشود كه اكتيويتي ساخت گرديده باشد و وقتي از در بين ميرود كه اكتيويتي به نقطه پايان رسيده باشد. در فيض، وقتي كه مالك اكتيويتي به نقطه پايان برسد، فريمورك به طور اتوماتيك سياق ViewModel’s onCleared() را صدا ميزند كه سبب ساز مي گردد كل منابع ازاد شوند. ليست پايين دربرگيرنده برخي از مزيت هاي ViewModel ميباشد: -پياده سازي گرديده براي مراقبت و رئيس داده هاي مرتبط با رابط كاربري -زنده ماندن تغييرات تنظيمات -يك چرخه حيات باخبر ميباشد -برخي اوقات ابجكت هاي LiveData را ذخيره مي نمايد -امداد به برقراري رابطه دربين اكتيويتي و فرگمنت -رها شدن از God Activities دور و اطراف (Room) Room يك كتابخانه استوار ميباشد كه پياده سازي گرديده براي امداد به ذخيره سازي داده هاي نرم افزار در يك مقر داده SQLite كه در همگي ورژن هاي اندرويد وجود دارااست. خصوصيت هاي آن دربرگيرنده موردها پايين ميشود: -خريداري كردن local data -يك لايه انتزاعي بر روي مقر داده SQLite جان دار -تحقيق كوئري هاي SQL در هنگام كامپايل -امكان مشاهده تغييرات در مقر داده با به كارگيري از LiveData -رهاشدن از boilerplate code -سازگازي بهتر با LiveData و RxJava ساختمان Room :كامپوننت هاي مختلفي از كتابخانه Room وجود دارااست كه درپي ميبينيم. موجوديت (Entity) -براي هر موجوديت يك جدول در ديتابيس تاسيس شده است. -آرم دهنده يك كلاس ميباشد، براي نگه داشتن يك سطر از مقر داده ابجكت دسترسي مقر داده (Database access objects) -اين مورد ها كامپوننت هاي مهم Room مي باشند چون انها مسئول تمجيد متدهاي دسترسي به مقر داده مي باشند. -روال هاي تعامل با مقر داده را تعريف و تمجيد ميكنند. -طراحي به طور اتوماتيك در طول كامپايل
امتیاز:
بازدید:
|
|
[قالب وبلاگ : سایت آریا] [Weblog Themes By : sitearia.ir] |