نگاه اجمالی به یک برنامه اندروید

در این پست سعی خواهم کرد به صورت کوتاه عناصر تشکیل دهنده یک برنامه اندرویدی را معرفی کنم.

خروجی تمامی کدها و resourceها در اندروید به یک فایل با پسوند .apk  ختم می شود.به عبارتی SDK اندروید تمامی کدها و داده های مارا به یک فایل با پسوند  .apk  تبدیل می کند.

هرapp اندروید در یک sandbox مخصوص به خود اجرا می شود.به نکات زیر  توجه کنید:

  • سیستم عامل اندروید یک سیستم عامل چند کاربره لینوکسی است که هرapp در واقع یک کاربر مجزا است.
  • به طور پیش فرض سیستم عامل به هر برنامه یک Linux user ID  منحصر بفرد اختصاص می دهد.به عبارتی تمام فایل های درون برنامه تنها توسط Linux user ID  اختصاص داده شده قابل دسترسی هستند.
  • هر پروسس روی یک ماشین مجازی منحصر بفرد خودش اجرا می شود.این موضوع باعث می شود هرapp در محیط ایزوله و مخصوص به خودش اجرا شود.
  • به طور پیش فرض هر app روی پروسس مخصوص به خود اجرا می شود و سیستم عامل هر زمان که نیاز باشد برنامه اجرا شود یک پروسس جدید می سازد و زمانی که دیگر به آن نیاز نباشد آن را از بین می برد.همچنین ممکن است در صورت کمبود منابع نیز یک پروسس را از بین ببرد.

سیستم اندروید با تکیه بر اصل حداقل بودن اختیارات(principle of least privilege) پیاده سازی شده است. به عبارتی به طور پیش فرض اجزای یک برنامه فقط دسترسی هایی را دارند که برای انجام کارهای خود به آن نیاز دارند و نه بیشتر.این کار باعث ایجاد یک محیط بسیار امن می شود.البته از طرق مختلف می توان به یک برنامه دسترسی های بیشتر اضافه کرد.

  • امکان این وجود دارد که دو برنامه یک Linux user ID مشخص را به اشتراک بگذارند.در این حالت می توانند به فایل های یک دیگر دسترسی داشته باشند.همچنین می توانند دو برنامه در یک پروسس و در نهایت روی vm اجرا شوند.
  • یک برنامه می تواند دسترسی های دیگر را از کاربر درخواست نماید.دسترسی هایی از قبیل sms ,sd card ,camera و … .

اجزای اصلی یک برنامه اندرویدی:

هرapp اندرویدی از اجزای مختلفی ایجاده شده است.در این جا سعی می کنیم با چهار جز اصلی تشکیل دهنده یکapp آشنا شویم.هر کدام از این اجزا یک نقطه ورودی برای برنامه بشمار می آیند.به عبارتی هر کدام از آنها مدخل ورودی به برنامه شما چه از طریق کاربر و یا چه از طریق خود سیستم هستند.این اجزا ممکن است به یکدیگر وابستگی داشته باشند.

Activities:

هر activity یک نقطه ورود توسط کاربر است.activity مشخص کننده یک صفحه کاربری است.برای مثال یک برنامه مدیریت کننده ایمیل دارای یک activity برای نمایش دادن ایمیل های جدید و یک activity برای ارسال ایمیل است.هر چند که این activityها به یکدیگر کمک می کنند تا یک برنامه مدیریت کننده ایمیل را بسازند ولی به صورت مستقل ازهم عمل می کنند.

وجود activity امکانات زیر را برای ما فراهم می کند:

  • Services:

یکی دیگر از اجزای اصلی سازنده یک برنامه اندروید Serviceها هستند.از Service برای انجام دادن کارها در background برنامه استفاده می شود.Serviceها رابط کاربری ندارند.باقی اجزا مانند activityها می توانند یک سرویس را اجرا نمایند.برای مثال می توان از سرویس برای پخش یک فایل موسیقی استفاده کرد و یا از آن برای یک عملیات سنگین تحت شبکه بدون قفل شدن رابط کاربری بهره برد.

دو نوع سرویس مجزا در اندروید وجود دارد:

Started services:سرویس هایی که استارت می شوند و تا زمان اتمام کارشان سیستم اندروید آنها را از بین نمی برد.

Bound services:مانند یک سرور در رابطه کلاینت سروری عمل می کند.به عبارتی یک درخواست را می گیرد و نتیجه را بازگشت می دهد.

Broadcast receivers:

از Broadcast receiverها برای اطلاع رسانی رویداد های مختلف سیستم به برنامه استفاده می شود.Broadcast receiverها یکی دیگر از مدخل های ورودی به برنامه هستند بنابراین چه برنامه اجرا باشد و چه بسته باشد این امکان وجود دارد که از این طریق به برنامه یک رویداداطلاع رسانی شود.تعداد زیادی از Broadcast receiverها از پیش تعریف شده هستند.برای مثال اینکه شارژ باتری در حال تمام شدن است .در ضمن برنامه ها نیز قابلیت تعریف Broadcast receiver برای خود را دارند.

Content providers:

content provider مدیریت کننده تمام داده های قابل اشتراک گذاری توسط برنامه است.این داده ها ممکن است در فایل سیستم , SQLite ,در وب و یا در هر حافظه ای که برنامه دسترسی ها لازم به آن را دارد ذخیره شوند.به مانند Broadcast receiverها یک سری content provider به صورت پیش فرض در یک سیستم اندرویدی وجود دارد.مثل content providerی که  برای دسترسی به اطلاعات دفتر تلفن از قبل نوشته شده است.برای دسترسی به برنامه طریق content provider از URI استفاده می شود.استفاده از content provider یک سری مزایا دارد:

  • می توانیم دیتا سورس خود را ساده تر تغییر دهیم.به وسیله abstractionی که روی لایه دیتاسورس خود می کشیم می توانیم مثلا از SQLite به یک وب سرویس تغییر کنیم.
  • می توانیم با دسترسی دلخواه دیتاسورس برنامه خودمان را به روی برنامه دیگر باز کنیم.
  • می توانیم از content providerهایی که توسط خود سیستم اندروید به صورت توکار ایجاد شده استفاده کنیم.

نحوه فراخوانی هر کدام از اجزای اصلی

سه جز از چهار جز اصلی اندروید یعنیactivities, services و  broadcast receivers به وسیله یک asynchronous messageی به اسم intent فعال می شوند. intent را می توان یک پیام برای در خواست انجام یک کار از یکی از اجزای برنامه خودمان و یا برنامه های دیگر تفسیر کرد.

بر خلاف activities, services و  broadcast receivers برای فراخوانی content providers از شی دیگری به اسم ContentResolver استفاده می شود که وظیفه برقراری ارتباط با content provider مورد نظر ما را دارد.

بنابراین با توجه به توضیحات بالا راهای زیر برای فراخوانی هر گدام از اجزای اندروید وجود دارد:

  • استارت کردن یکactivity با استفاده از startActivity() و یا startActivityForResult() و پاس دادن یک intent.
  • استفاده از JobScheduler برای زمانبندی یک یا چند عملیات.
  • استارت کردن یک service با صدا زدن startService() و یا bindService() و پاس دادن یک intent به آن
  • ایجاد یک broadcast به وسیله sendBroadcast(), sendOrderedBroadcast(), و یا sendStickyBroadcast() و  پاس دادن یک intent.
  • کو‌ئری زدن روی یک content provider به وسیله ContentResolver.

فایل manifest

قبل از اینکه برنامه توسط سیستم اندروید اجرا شود سیستم عامل باید بداند که در برنامه چه عناصری وجود دارد و این کار را از طریق خواندن فایل مانیفست که یک فایلی به اسم AndroidManifest.xml در روت برنامه هست انجام میدهد.این فایل حاوی موارد زیر است:

  • دسترسی های مورد نیاز.
  • مشخص کننده  حداقل  API Level  برای برنامه.
  • مشخص کننده سخت افزار و نرم افزارهای مورد نیاز.
  • مشخص کننده API librarieهایی که برنامه به آن ها نیاز دارد مثل Google Maps library.

App resources

یک برنامه اندروید به غیر از کدهای جاوا(یا هر زبان دیگری)دارای یک سری فایل های دیگر مثل عکس صدا ویدئو و … است.علاوه بر آن ها انیمشن ها, رنگها, استایل ها وlayoutها نیز در یک سری فایل های xml ذخیره می شوند.به این فایل ها resource گفته می شود.جداسازیresource ها (از کد) باعث می شود تغییرات ساده تر انجام شوند و به طور مثال بتوانیم برای محیط های مختلف  layoutهای متفاوتی را ایجاد کنیم و یا برای محیط های مختلف از زبان های مختلفی پشتیبانی کنیم.

یک دیدگاه برای “نگاه اجمالی به یک برنامه اندروید”

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *