آموزش اندروید استفاده از parceler

آموزش برنامه نویسی اندروید

1395/10/08 02:36:00 صبح

در این پست به معرفی و سپس آموزشِ استفاده از parceler می‌پردازیم.

سطح آموزش: #متوسط

کاری که Parceler انجام میده اینه که wrapper (میشه ترجمه کرد دربرگیرنده) برای کلاس‌های شما درست میکنه. شما خودتونم میتونین این کارو کنین ولی خب اختراع دوباره‌ی چرخ هست اینکار. هم وقت‌گیره هم کد رو طولانی میکنه.

بذارین اول برای کاربرهای تازه‌کارتر یک مقدار توضیح بدم. فرض کنید میخوایم بین دوتا اکتیویتی جابجا بشیم و یک object هم داریم که داخلِ هر دو کلاس بهش نیاز داریم. چندتا راهکار وجود داره

  1. میتونیم یک objectـه global بسازیم که از همه کلاس‌ها دیده بشه. خب این بدترین کاریه که میشه کرد. امنیت که اصلا نداره چون باید public تعریف کرد. از طرفی سرباری برای ramـه گوشی داره چون همیشه این object رو توی حافظه خودش load شده آماده داره.
  2. میتونیم از طریق یک متد global یک متغیر globalـه private داشته باشیم. بحثِ امنیت اینجا بهتر شده ولی بازهم سربار روی حافظه داریم.
  3.  یک کلاسِ wrapper بنویسیم که object رو از طریقِ اون انتقال بدیم. خب مشخصه که این کار بسیار وقت‌گیره. مخصوصا که باید برای هر object جداگانه کلاسی بنویسیم.
  4. استفاده از Serializable که یک interfaceـه جاواست. مشکل اینه که objectـه موقتِ زیادی درست میکنه. بنابراین هم پروسه‌ی ایجاد اینارو داریم و هم garbage collector که میخواد فضا رو آزاد کنه پروسه‌ای داره که در مجموع روی عملکرد تاثیر میذاره.
  5. استفاده از Parcelable که بخصوص در اندروید طراحی شده. بسیار سریع‌تر از Serializable هست. ولی پیاده‌سازیش نسبت به Serializable زمان بیشتری میگیره.
  6. استفاده از کتابخونه Parceler که فواید روشِ Parcelable رو داره (چون دقیقا همونه) و اینکه کد نوشتنش هم بی‌نهایت ساده‌ست و همه چیز اتوماتیک انجام میشه.

پس ما از روش ۶ استفاده میکنیم. برگردیم به مثالِ بالا. برای اینکه بینِ دو activity مقدار رو جابجا کنیم بهترین کار استفاده از همون intentـی هست که داریم باهاش جابجا میشیم. ولی intent محدودیت‌هایی داره و نمیتونه بطورِ پیش‌فرض از همه ساختارهایی که ما میسازیم پشتیبانی کنه.

اینجاست که کتابخانه Parceler  به کمکمون میاد.

parceler

ابتدا به build.gradle که در پوشه project هست (نه اونی که داخل app هست) برید و خط زیر رو وارد کنید.

کد

خب حالا به build.gradle داخلی برید و خط‌های زیر رو وارد کنید.

فرض کنید یک کلاسِ user داریم. برای استفاده از قابلیت‌های این کتابخونه یک @Parcel به ابتدای کلاس اضافه میکنیم

حالا فرض کنیم بخوایم یک نمونه از این کلاس رو بفرستیم. به شکل زیر عمل میکنیم.

برای دریافت هم در کلاسِ مقصد به شکل زیر عمل می‌کنیم.

برای مطالعه بیشتر به اینجا میتونید سر بزنید.

جمع‌بندی

توی این درس یاد گرفتیم از متغیرهای global برای جابجایی مقدار استفاده نکنیم.

Serializable و Parcelable رو شناختیم. چه کاربردی دارن و چه تفاوت‌هایی با هم دارن.

کار کردن با کتابخونه parceler رو یاد گرفتیم که کارمون رو خیلی ساده و حرفه‌ای میکنه.