چهارشنبه ۲۵ آبان ۰۱ ۱۱:۵۲ ۲۲ بازديد
رئیس چرخه حیات یکیاز بزگترین معضل های ایجاد کرد طراحی اپلیکیشن در مشهد یک نرم افزار اندرویدی میباشد. درحالتی که از فرگمنت ها به کارگیری فرمایید چرخه حیات حتی قادر است بغرنج خیس خواهد شد ، چرا که چرخه حیات آنها در ورژن های متعدد اندروید متعدد میباشد ( اما این اختلال الان به وسیله کتابخانه 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
}
}
- ۰ ۰
- ۰ نظر