با یک سری دیگه از آموزش های قدم به قدم با مونو در خدمت شما هستیم در آموزش قبلی با طریقه انتقال داده بین Activities در زامارین آشنا شدیم در این آموزش قصد داریم با یکی دیگه از مولفه های مهم در برنامه نویسی اندروید آشنا شویم.سرویسها در اندروید جهت استفاده در برنامه های که نیاز به کارهای طولانی و در دسترس بودن همیشگی را دارند کاربرد خواهند داشت. سرویسها در اندروید معمولآ کار خود را با فعالیت ها آغاز می کنند دو راه جهت استفاده از سرویسها در برنامه های اندروید وجود دارد.
- سرویسهای اغاز شده (Started Services)
- سرویسهای محدود (Bounded Services)
سرویسهای اغاز شده (Started Services)
سرویس های آغاز شده توسط فعالیت ها با استفاده از تابع StartService کار خود را آغاز می کنند. همچنین این سرویسها با استفاده از تابع StopService به کار خود پایان می دهند این نوع سرویسها حتی پس از نابود شدن (اجرای تابع destroyed) به کار خود ادامه خواهند داد. این نوع سرویسها پس از اجرا نیازی ندارند تا بدانند توسط کدام فعالیت شروع به کار کرده اند. در تصویر شما چرخه حیاط یک سرویس آغاز شده را بعلاوه تابع فراخوانی آن را مشاهده خواهید کرد.
همچنین این کلاس دارای یک تابع OnBind هست که باید پیاده سازی دارد چون این کلاس یک کلاس انتزاعی است (abstract) ولی چون ما این نوع سرویس ها رو با StartService فراخوانی می کنم نیاز به پیاده سازی خواصی نداریم کافیست برای سرویس آغاز شده null بازگشت دهیم. تابع OnBind معمولا در سرویس های محدود استفاده می شود که در ادامه توضیح خواهیم داد.
نحوه ایجاد یک سرویسهای اغاز شده
پس از ایجاد یک کلاس در برنامه خود کافیست خصوصیت Service و ارث بری از این کالاس را برای سرویس مورد نظر ایجاد نمایید و در صورت نیاز برخی از توابع آن را دورباره نویسی نمایید به کد های زیر توجه کنید
using Android.App; using Android.Content; using Android.OS; using Android.Runtime; using Android.Util; namespace Alarm { [Service] public class MYservice : Service { public override void OnCreate() { Log.Debug("MYservice", "شروع کار سرویس"); base.OnCreate(); } [return: GeneratedEnum] public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId) { return base.OnStartCommand(intent, flags, startId); } public override void OnDestroy() { Log.Debug("DemoService", "از بین رفتن سرویس"); base.OnDestroy(); } public override IBinder OnBind(Intent intent) { // چون یک سرویس آغاز شده است نیاز به پیاده سازی خاصی ندارد return null; } } }
در مثال بالا توابعی را دوباره نویسی کردیم که در زیر در مورد آنها توضیح خواهیم داد
- OnCreate : زمانی یک سرویس کار خود را آغاز کرد این تابع فراخوانی خواهد شد. این جایی است که نیاز به مقداردهی اولیه مورد نیاز دارید.
- OnStartCommand : هر زمانی که درخواستی به این سرویس فرستاده شود این تابع فراخوانی خواهد شد. مثلآ ریست شدن سیستم
- OnDestroy : این تابع زمانی فراخوانی می شود یک سرویس توسط دو متد StopSelf و StopService فراخوانی شود.
خاصیت [Service] باعت رجیستر شدن این سرویس در فایل AndroidManifest.xml خواهد شد در کد زیر نحوه رجیستر کردن یک فایل در فایل AndroidManifest.xml را بطور مستقیم نشان می دهد
<service android:name="Alarm.MYservice"></service>
سرویسهای محدود (Bounded Services)
سرویسهای محدود توسط فعالیت ها با استفاده از تابع bindService کار خود را آغاز می کنند. همچنین این سرویس خدماتی را بصورت کلاینت – سروی
می هد همچنین این نوع سرویس ها می توانند به وسیله یکسری فرایند خاص در برنامه های دیگر ایجاد شوند و همچنین این سرویس ها می توانند به چندین برنامه دیگر سرویس دهی کنند.
در تصویر شما چرخه حیاط یک سرویس محدود را مشاهده خواهید کرد
- OnBind : این تابع زمانی استفاده می شود که نیاز به استفاده از سرویس داریم چون این تایع یک شی از IBinder جهت استفاده کلاینت می دهد این تاربع معمولآ د سوریس فراخوانی می شود
- OnUnbind : هر زمان که کلاینتی قصدپایان دادن کار خود با این سرویس را دارد جهت رها شدن از سرویس از این تابع استفاده می کند
جهت اطلاع بیشتر از سرویس های آغاز شده به اینجا و سرویس های محدود به اینجا مراجعه فرمایید
- ۲۱ آبان ۱۳۹۴ ۲۱:۰۸
- 0
- محمدزاده
- قدم به قدم با مونو
- 2,574 بازدید