مقالات تخصصي طراحي اپ موبايل
مرجع رسمي مقالات طراحي اپليكيشن

توسعه و گسترش دهندگان اندرويد در زمان ساختن نرم افزار هاي اندرويدي با بحران هاي رايجي مانند مدير چرخه حيات حادثه ها، مرحله مراقبت و ذخيره سازي اطلاعات مواجه مي‌شوند. اين كارداران سبب ساز مشقت بسط نرم افزار اندرويدي ميشوند. براين اساس در‌اين نوشته‌علمي تشكيل داد نرم افزار هاي امروزي با به كارگيري از معماري كامپوننت ها در اندرويد را تحقيق خوا‌هيم كرد.
گسترش دهندگان اندرويد در طي ساختن نرم افزار هاي اندرويدي با معضل هاي رايجي مانند مدير چرخه حيات حوادث، مرحله مراقبت و ذخيره سازي اطلاعات مواجه مي گردند. اين دست اندركاران منجر رنج پيشرفت نرم افزار اندرويدي ميشوند. خلال اين ها اعضاي يك گروه اندرويد هيچگاه طريقه هاي طراحي اپليكيشن در مشهد خويش را درباره‌ي اينكه از كدام معماري استعمال كنيم مطرح نمي‌كنند. آن‌ها مدام توصيه مي كنند كه از معماري اي استعمال شود كه شايسته ترين سازش رو با نرم افزار داراست، كه در بيشتر مواقع اين سفارش منجر گنگي بيشتر مي گردد تا پر‌نور خيس كردن مسئله.

خوشبختانه مجموعه اندرويد، معماري كامپوننت ها را يار با شيوه نامه ها و پند ها براي حل ايرادات رايج در زمان ايجاد كرد نرم افزار اندرويدي دراختيار گسترش دهندگان گذارده ميباشد.

معماري كامپوننت ها چيست؟

باتوجه به گفته هاي مجموعه پيشرفت دهنده اين معماري، "معماري كامپوننت ها يك گروه نو از كتابخانه هايي ميباشد كه ياري ميكنند تا شما يك نرم افزار توانمند كه قابليت و امكان آزمايش و مراقبت دارااست را پياده سازي نمائيد. آنان با كلاس هايي كه وظيفه رئيس چرخه حيات اجزاي رابط كاربري شما ومديريت ماندگاري اطلاعات را بر عهده دارا هستند استارت كردند."

 

درادامه كامپوننت هاي ماژولاري كه مي‌توانند با يكديگر يا اين كه جداازهم به كارگيري شوند نقل شده ميباشد:

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

}

}


override fun onDestroy() {

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 = ....

}


fun getNewsArticles(): List {

return newsArticles

}

}
كلاس NewsViewModel كه اطلاعات را نگه مي دارد كه درين بخش "newsArticles" ميباشد، و از جايي گرفته ميگردد (در وضعيت ايده ال از يك repository، كه پيرو ميبينيم). همانگونه كه پيش از اين دعوا كرديم، ViewModel معمولا اطلاعات رو در يك هيبت از LiveData نگه مي‌دارد تا رابط كاربري را فورا بعداز تغيير‌و تحول بروز نمايد.

class NewsViewModel() : ViewModel() {

private var newsArticles: LiveData>


init {

// Load the data over here

newsArticles = ....

}


fun getNewsArticles(): LiveData> {

return newsArticles

}

}
اكنون نگاهي به كنترلگر هاي رابط كاربري مان (Activity و Fragment) مي اندازيم:

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)


// Observing for data change

newsViewModel.getNewsArticles().observe(this, Observer> {

// Update the UI

})

}

}
در اكتيويتي يا اين كه فرگمنت ما يك مثال از ViewModel با به كارگيري از ViewModelProviders مي‌سازيم و آن گاه با به كارگيري از "getter " كه تعريف و تمجيد كرده ايم اطلاعات را مي‌گيريم. وقتي كه ما اطلاعات را در پوسته يك بسته LiveData برگردانيم مي‌توانيم تغييرات داده را پژوهش كنيم.

 

پشت صحنه:

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 مي باشند چون انها مسئول تمجيد متدهاي دسترسي به مقر داده مي باشند.

-روال هاي تعامل با مقر داده را تعريف و تمجيد ميكنند.

-طراحي به طور اتوماتيك در طول كامپايل

امتیاز:
بازدید:
برچسب: طراحي اپليكيشن در مشهد،
موضوع:
[ ۱۸ ارديبهشت ۱۴۰۲ ] [ ۰۹:۰۵:۲۴ ] [ حامد ] [ نظرات (0) ]
[ ]
.: Weblog Themes By sitearia :.

درباره وبلاگ

نويسندگان
نظرسنجی
لینک های تبادلی
فاقد لینک
تبادل لینک اتوماتیک
لینک :
خبرنامه
عضویت لغو عضویت
پيوندهای روزانه
لينكي ثبت نشده است
پنل کاربری
نام کاربری :
پسورد :
عضویت
نام کاربری :
پسورد :
تکرار پسورد:
ایمیل :
نام اصلی :
آمار
امروز : ---
دیروز : ---
افراد آنلاین : 9
همه : ---
چت باکس
موضوعات وب
موضوعي ثبت نشده است
امکانات وب

سئو کار حرفه ای / خرید پیج اینستاگرام / باربری / دانلود نرم افزار اندروید  / شرکت خدمات نظافتی در مشهد / شرکت نظافت منزل و راه پله در مشهد / شرکت نظافت راه پله در مشهد / شرکت نظافت منزل در مشهد  /سایت ایرونی  / بازی اندروید  /  خدمات گرافیک آریا گستر  / فروش پیج آماده آریا گستر / نیازمندی های نظافتی / وکیل در مشهد / ارز دیجیتال / نیازمندی های قالیشویی / مبل شویی / املاک شمال  / آرد واحد تهران / فیزیوتراپی سیناطب / sell Instagram account safely / نیازمندی های گردشگری / نیازمندی های سالن زیبایی