سرویس ها (Services) در برنامه نویسی اندروید

سرویس(Service) برنامه نویسی اندروید

خلاصه آموزش:

  • سرویس در برنامه نویسی اندروید

  • انجام عملیات در پشت صحنه با استفاده از سرویس

  • چرخه حیات سرویس

  • ساخت پروژه سرویس

آموزش ساخت و پیاده سازی سرویس(Service):

سرویس ها (Services)کامپوننت هایی هستند که برای انجام عملیات های طولانی مدتی که به تعامل با کاربر نیاز ندارند در پشت صحنه اجرا می شود – مانندسرویس(Service) پخش موزیک یا دانلود فایل – و حتی زمانی که برنامه ی ایجاد کننده ی آن ها پایان یابد نیز به فعالیت خود ادامه می دهند. اصولا یک سرویس می تواند دو حالت داشته باشد.

حالت توضیحات
Started حالت started یک سرویس مربوط به زمانی است که یک کامپوننت از برنامه مانند یک اکتیوتی آن را با فراخوانی متد ()startService آغاز می کند. پس از شروع، سرویس می تواند به صورت نامحدود در پس زمینه اجرا شود حتی اگر کامپوننت آغاز کننده ی آن نابود شده باشد.
Bound حالت bound (محدود) یک سرویس مربوط به زمانی می شود که یک کامپوننت از برنامه با فراخوانی متد ()bindService به آن متصل شود. یک سرویس محدود یک واسط کلاینت-سرور را ارائه می دهد و به کامپوننت ها اجازه می دهد با سرویس ارتباط برقرار کنند، درخواست های خود را به آن ارسال و نتایج را دریافت کنند و یا حتی این کار ها را در بین فرآینده هایی که دارای ارتباط بین فرآیندی هستند (IPC) انجام دهند.

یک سرویس در چرخه حیات خود یک سری متد های تعاملی دارد که شما می توانید با استفاده از آن ها بر تغییر حالت سرویس ها نظارت کنید و اقدامات متناسب با هر حالت را پیاده سازی کنید. در زیر نمودار سمت چپ چرخه ی حیات یک سرویس را که با متد ()startService ساخته شده است نشان می هد و نمودار سمت راست مربوط به چرخه ی حیات سرویسی است که با متد ()bindService ایجاد شده:

سرویس

برای ساختن یک Service باید یک کلاس Java که توسعه دهنده ی کلاس اصلی سرویس یا یکی از زیر کلاس های آن است را ایجاد کنید. کلاس اصلی سرویس در بر گیرنده ی متد های تعاملی مختلفی است که مهم ترین های آن ها در جدول زیر آورده شده است.البته شما نیازمند استفاده از تمام آن ها نخواهید بود. با این حال لازم است مفهوم و کارایی هر یک از آن ها را بدانید تا با استفاده ی مناسب از آن ها بتوانید در حالت های گوناگون تعاملی مطمئن را بین کاربر و نرم افزارتان برقرار کنید که در آن انتظارات کاربر برآورده شود.

متد توضیحات
()onStartCommand سیستم زمانی این متد را فراخوانی می کند که یک کامپوننت دیگر مانند اکتیویتی با استفاده از متد ()startService خواستار شروع سرویس باشد. اگر شما برای پیاده سازی سرویس از این متد استفاده کنید، متوقف کردن سرویس هنگامی که کارش به پایان رسید به عهده ی شما خواهد بود. این کار با فراخوانی متد ()stopSelf یا ()stopService قابل انجام است.
()onBind هنگامی که یک کامپوننت بخواهد با استفاده از متد ()bindService به یک سرویس متصل شود سیستم این متد را فراخوانی می کند. در صورت استفاده از این متد شما باید بوسیله ی برگرداندن یک شی IBinder یک رابط کلاینت را برای اتصال به سرویس ایجاد کنید. شما همیشه باید از این متد استفاده کنید، اما اگر نمی خواهید اتصالی برقرار شود می توانید مقدار بازگشتی را null تعیین کنید.
()onUnbind سیستم این متد را زمانی فراخوانی می کند که تمام کلاینت های متصل به یک سرویس واسط قطع شده باشند.
()onRebind پس از اینکه سرویس با استفاده از متد (onUnbind(Intent از قطع شدن تمام کلاینت ها مطلع شد، اگر کلاینت جدیدی به سرویس متصل شود سیستم این متد را فراخوانی خواهد کرد.
()onCreate هنگامی که یک سرویس بخواهد برای اولین بار، با استفاده از متد ()onStartCommand یا ()onBind ساخته شود این متد فراخوانی می گردد. -توجه داشته باشید که فراخوانی این تابع تنها یک بار، آن هم در زمان راه اندازی برنامه انجام می شود .
()onDestroy هنگامی که سرویس مدت زیادی بدون استفاده بماند یا در آستانه ی از بین رفتن باشد سیستم این متد را فراخوانی می کند. سرویس شما باید برای پاک کردن تمام منابعی که در اثر راه اندازی ایجاد شده اند مانند نخ ها، ثبت کننده ها، دریافت کننده ها و غیره این متد را پیاده سازی کند.

ساختار سرویس زیر چرخه حیات هر کدام از متد ها را نشان می دهد.

مثال

این مثال به طور اجمالی مرحله به مرحله و خیلی ساده به شما نشان می دهد، چگونه یک سرویس اندرویدی را ایجاد کنید. شرح کامل مراحل در ادامه آموزش آمده است:

مرحله توضیحلت
۱ با استفاده از اندروید استودیو یک پروژه ی جدید ایجاد کنید.
۲ فایل اصلی اکتیویتی یعنی MainActivity.java را تغییر داده و متد های ()startService و ()stopService را به آن اضافه کنید.
۳ در زیرشاخه ی بسته com.example.android.services پروژه یک فایل جاوای جدید با نام MyService.java ایجاد کنید. این فایل اجرا کننده ی متدهای مربوط به سرویس خواهد بود.
۴ با استفاده از تگ </…service> سرویس خود را در فایل AndroidManifest.xml ایجاد کنید. یک نرم افزار بدون هیچ محدودیتی بر حسب نیاز می تواند یک یا چندین سرویس داشته باشد.
۵ محتوای پیش فرض فایل res/layout/activity_main.xml را به یک لایه ی خطی که حاوی دو دکمه و دو متن است تغییر دهید.
۶ دو رشته ی ثابت start_service و stop_service را در فایل منبع res/values/strings.xml تعریف کنید.
۷ نرم افزار را با استفاده از شبیه ساز دستگاه اندروید اجرا کنید و نتیجه ی حاصل از تغییرات برنامه را بررسی نمایید.

در ادامه محتوای تغییر یافته ی فایل java/com.example.android.services/MainActivity.java را آورده ایم. این فایل می تواند شامل چرخه حیات هر کدام از متد های اساسی باشد. ما متد های ()startService و ()stopService را برای شروع و پایان سرویس استفاده کرده ایم.

محتوای فایل java/com.example.My Application/MyService.java نیز در زیر آورده شده است. در این فایل یک یا چندین متد مربوط به سرویس را بر حسب نیاز می توانید پیاده سازی کنید. اما فعلا برای شروع ما تنها دو متد ()onStartCommand و ()onDestroy را در این فایل پیاده سازی کرده ایم

کدهای پایین نیز مربوط به فایل تغییر یافته AndroidManifest.xml می شوند. در اینجا تگ </…service> که سرویس ما را معرفی می کند در خطوط پایانی فایل نوشته شده است:

در زیر محتوای فایل res/layout/activity_main.xml نشان داده شده است:

در پایین نیز محتوای کامل فایل res/values/strings.xml را آورده ایم که البته در آن هفت ثابت ایستا تعریف شده است:

حال برنامه را با استفاده از اندروید استودیو اجرا می کنیم. اگر همه چیز بدون مشکل پیش برود پنجره شبیه ساز شما مانند تصویر زیر خواهد بود.

Services

حالا برای شروع شدن سرویس روی دکمه ی شروع Service کلیک کنید؛ که در اثر آن سرویس شروع خواهد شد و با توجه به کد های نوشته شده در متد ()onStartCommand مانند تصویر زیر پیام سرویس شروع شد در پایین پنجره شبیه ساز ظاهر می شود

برای پایان دادن به سرویس می توانید روی دکمه ی پایان Service کلیک کنید.