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

وضعیت

توصیف

Started (آغاز شده)

یک سرویس در حالت Started قرار دارد، زمانیکه یک مولفه از اپلیکیشن، مانند یک فعالیت، آن را با فراخوانی startService() آغاز کند. زمانی که یک سرویس آغاز شد، می تواند به صورت نامحدود در پس زمینه اجرا شود حتی اگر مولفه ای که آن را شروع کرده، از بین برود.

Bound (مقید)

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

یک سرویس در چرخه حیات خود دارای متدهای callback ایست که شما می توانید برای نظارت بر تغییرات وضعیت سرویس آنها را اجرا کنید و می توانید این کار را در زمان مناسب انجام دهید. نمودار زیر در سمت چپ نشان دهنده­ ی چرخه حیات سیستم در زمانی است که سرویس به وسیله­ ی startService() ایجاد می شود و نمودار سمت راست نشان دهنده­ ی چرخه­ ی حیات سیستم در زمانی است که سرویس به وسیله ­ی bindService() ایجاد می شود (منبع تصویر: android.com ).

برای ایجاد یک سرویس شما یک کلاس جاوا را ایجاد می کنید که کلاس اصلی (کلاس مبنای) Service یا یکی از زیر کلاس های آن را توسعه می دهد. کلاس مبنای Service متدهای callback مختلفی را تعریف می کند که مهمترین آنها در جدول زیر ارائه شده است. شما نیاز ندارید که همه­ ی متدها را پیاده سازی و اجرا کنید. با این حال، مهم است که شما هر کدام از آنها را بفهمید و از بین آنها مواردی که نیازمندی های مورد نیاز کاربران اپلیکیشن شما را تامین می کنند، پیاده سازی کنید.

Callback

توصیف

onStartCommand()

سیستم این متد را زمانی فراخوانی می کند که مولفه­ ی دیگری مانند یک فعالیت، با فراخوانی startService() درخواست کند که سرویس آغاز شود. در صورتی که شما این متد را پیاده سازی کنید، توقف سرویس بعد از اتمام کار آن به عهده شماست. این کار با فراخوانی متدهای stopSelf() یا stopService() انجام می شود.

onBind()

سیستم این متد را زمانی فراخوانی می کند که یک مولفه دیگر بخواهد با فراخوانی bindService() به سرویس متصل شود. در صورت پیاده سازی این متد، شما باید با برگرداندن یک شی IBinder، واسطی را ایجاد کنید که کلاینت از آن برای برقراری ارتباط با سرویس استفاده کند. شما باید همیشه این متد را پیاده سازی کنید، ولی در صورتی که نخواهید اجازه­ ی اتصال بدهید، باید null را برگردانید.

onUnbind()

سیستم این متد را زمانی فراخوانی می کند که اتصال همه­ ی کلاینت ها،از یک واسط خاص منتشر شده به وسیله­ ی سرویس قطع شود. این متد بعد از اینکه سیستم از طریق onUnbind(Intent) متوجه شود که اتصال همه سرویس ها قطع شده است، اجرا می شود.

onCreate()

سیستم این متد را زمانی فراخوانی می کند که سرویس برای اولین بار توسط StartCommand() یا onBind() ایجاد شود. این فراخوانی یک بار در طول راه اندازای انجام می شود.

onDestroy()

سیستم این متد را زمانی فراخوانی میکند که سرویس، دیگر مورد استفاده قرار نگیرد و از بین برود. سرویس شما باید این کار را برای پاک کردن تمام منابع مانند نخ ها، شنود کننده های ثبت شده دریافت کننده ها و غیره انجام دهد.

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

مثال

این مثال، از طریق تعدادی مراحل ساده به شما آموزش می دهد که چگونه سرویس اندرویدی خود را ایجاد کنید. مراحل زیر را برای تغییر اپلیکیشن اندرویدی ای که ما در بخش Hello World Example ایجاد کردیم، دنبال کنید.

مرحله

توصیف

۱

از Eclipse IDE برای ایجاد یک اپلیکیشن اندرویدی استفاده کنید و آن را همانطور که در مثال بخش Hello World Example شرح داده شد، تحت پکیج Hello World Example، HelloWorld بنامید.

۲

فایل فعالیت اصلی MainActivity.java را برای اضافه کردن متدهای startService() و stopService() تغییر دهید.

۳

یک فایل جاوای جدید MyService.java را تحت پکیج com.example.helloworld ایجاد کنید. این فایل شامل پیاده سازی متدهای مربوط به سرویس اندرویدی خواهد بود.

۴

سرویس خود را با استفاده از تگ ، در فایل AndroidManifest.xml تعریف کنید. یک اپلیکیشن بدون هیچ محدودیتی می تواند یک یا تعداد بیشتری سرویس داشته باشد.

۵

محتوای پیش فرض فایل فایل res/layout/activity_main.xml را تغییر دهید به طوری که شامل دو دکمه در صفحه بندی خطی باشد.

۶

دو ثابت start_service و stop_service را در فایل res/values/strings.xml تعریف کنید.

۷

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

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

در بخش زیر محتوای فایل src/com.example.helloworld/MyService.java ارائه شده است. این فایل می تواند، شامل پیاده سازی یک یا تعداد بیشتری سرویسِ مربوط به Service اصلی یا نیازمندی ها باشد. در حال حاضر ما فقط قصد داریم که متدهای onStartCommand() و onDestroy() را پیاده سازی کنیم.

در بخش زیر محتوای تغییر یافته­ ی فایل AndroidManifest.xml ارائه شده است، در اینجا ما تگ را برای وارد کردن سرویس مان اضافه کرده ایم.

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

بخش زیر نشان دهنده­ی محتوای فایل res/values/strings.xml برای تعریف دو ثابت جدید است.

اکنون می خواهیم اپلیکیشن تغییر یافته­ ی Hello World! را اجرا کنیم، من فرض می کنم که شما ADV خود را در طول نصب محیط ایجاد کرده باشید. برای اجرای اپلیکیشن از Eclipse، یکی از فایل های فعالیت پروژه­ ی خود را باز کنید و بر روی آیکن Run از نوار ابزار خود کلیک کنید. Eclipse، اپلیکیش را بر روی AVD شما نصب می کند و آن را آغاز می کند و در صورتی که همه ­ی موارد مربوط به تنظیمات و برنامه شما درست باشد، صفحه امولاتور زیر برای شما نمایش داده می شود.

اکنون برای آغاز کردن سرویس خود، بر وری دکمه Start Service کلیک کنید، این کار سرویس شما را آغاز می کند و با توجه به کدهای برنامه نویسی شده در متد onStartCommand() پیغام Service Started (به معنای سرویس آغاز شد)، در بخش انتهایی شبیه ساز به صورت زیر نمایش داده می شود.

برای متوقف کردن سرویس، شما می توانید بر روی دکمه Stop Service کلیک کنید.