مشخصات پروژه
-
612
-
0.0
-
7687
-
0
-
0
معرفی کامپوننت سرویس در اندروید
سرویس ها یکی از مهمترین کامپوننت های سیستم عامل اندروید می باشند و ظیفه آنها اجرا نمودن عملیات های سنگین و زمان بر در پس زمینه می باشد و دارای رابط کاربری نمی باشند. از اقدامات طولانی مدت می توان به دانلود دوره ای داده ها از اینترنت، ذخیره چندین مورد به پایگاه اطلاعاتی، انجام I/O، اجرای فهرست مخاطبین و ... اشاره کرد. سرویس ها جایگزین اقدامات طولانی مدت می باشند.
دوره آموزش اندروید
دوره آموزش برنامه نویسی اندروید
با عرض سلام و خسته نباشید به شما دانشجویان محترم آموزشگاه تحلیلگر داده ها. در این مقاله قصد داریم کامپوننت سرویس را برای شما دانشجویان توضیح دهیم.
اهداف پروژه :
در این مقاله ما قصد داریم مطالب زیر را برای شما شرح دهیم:
معرفی کامپوننت سرویس
انجام یک مثال کوچک
سرویس ها یکی از مهمترین کامپوننت های سیستم عامل اندروید می باشند و ظیفه آنها اجرا نمودن عملیات های سنگین و زمان بر در پس زمینه می باشد و دارای رابط کاربری نمی باشند. از اقدامات طولانی مدت می توان به دانلود دوره ای داده ها از اینترنت، ذخیره چندین مورد به پایگاه اطلاعاتی، انجام I/O، اجرای فهرست مخاطبین و ... اشاره کرد. سرویس ها جایگزین اقدامات طولانی مدت می باشند.
سرویس یکی از بخش های برنامه است که برای انجام اقدامات طولانی مدت در پس زمینه به کار برده می شود.
سرویس دارای رابط کاربری نمی باشد و نمی تواند به طور مستقیم با فعالیتی در ارتباط باشد.
سرویس می تواند به طور نامحدود در پس زمینه اجرا گردد و فعالیت آن بعد از نابودی بخشی که آن را آغاز نموده است نیز ادامه می یابد.
معمولا سرویس همواره یک اقدام را انجام داده و بعد از اتمام متوقف می گردد.
سرویس در رشته اصلی اپلیکیشن اجرا می گردد و رشته خود را ایجاد نمی نماید. اگر سرویس ما اقدامات طولاتی مدت انسداد را ادامه دهد، ممکن است برنامه به حالت Not Responding در آید و در نتیجه می بایست رشته جدیدی را در سرویس ایجاد نماییم.
سرویس اساسا می تواند به دو شکل باشد:
Started « آغاز شده »: یک سرویس در حالت Started قرار دارد، زمانی که یک مولفه از برنامه، مانند یک فعالیت، آن را با فراخوانی startService() آغاز نماید. زمانی که یک سرویس آغاز گردید، می تواند به صورت نامحدود در پس زمینه اجرا گردد حتی اگر مولفه ای که آن را شروع نموده است، از بین برود.
Bound « مقید »: یک سرویس در حالت Bound قرار دارد، زمانی که یک مولفهی برنامه با فراخوانی bindService() به آن متصل گردد. یک سرویس bound، یک واسط کلاینت سرور را ارائه می نماید و به مولفه ها اجازه می دهد تا با سرویس ارتباط برقرار نمایند، درخواست های خود را به آن ارسال نمایند، نتایج را دریافت نمیاند و حتی این کارها را در بین فرایندهایی که دارای ارتباط بین فرایندی « IPC » هستند، انجام دهند .
چرخه حیات سرویس ها
یک سرویس در چرخه حیات خود دارای متدهایی می باشد که ما می توانیم برای نظارت بر تغییرات وضعیت سرویس آن ها را اجرا نماییم و می توانیم این کار را در زمان مناسب انجام دهیم. شکل زیر در سمت چپ نشان دهندهی چرخه حیات سیستم در زمانی می باشد که سرویس به وسیلهی متد startService() ایجاد می گردد و شکل سمت راست نشان دهندهی چرخه ی حیات سیستم در زمانی می باشد که سرویس به وسیله ی متد bindService() ایجاد می گردد. (شکل 1)
![]()
شکل 1
برای ایجاد یک سرویس ما می بایست یک کلاس جاوا را ایجاد نماییم که کلاس اصلی Service و یا یکی از زیر کلاس های آن را توسعه می دهد. کلاس مبنای Service متد های مختلفی را تعریف نماید که مهمترین آن ها در ادامه ذکر خواهند شد. ما نیاز نداریم که تمامی متد ها را پیاده سازی و اجرا نماییم. اما با این وجود، مهم است که ما هر کدام از آن ها را بفهمیم و از بین آن ها مواردی که نیازمندی های مورد نیاز کاربران برنامه های ما را تامین می نمایند، پیاده سازی نماییم.
اگر فردی روش Context.startService () یا bindService() را فراخواند، سرویس توسط سیستم اجرا می شود.
onStartCommand(): این روش با استفاده از startService زمانی که سرویس آغاز می گردد خوانده می گردد. همزمان با اجرای این روش، سرویس آغاز گشته و می تواند در پس زمینه به طور نامحدود فعالیت نماید. اگر این روش را اجرا نماییم، وظیفه ماست که سرویس را پس از اتمام با استفاده از stopSelf() یا stopService() متوقف نماییم. اگر سرویس خود را به عنوان bounded service معرفی نماییم، نیازی نیست که این روش را اجرا نماییم.
onBind(): اگر قرار است سرویس خود را به عنوان bounded service تعریف نماییم می بایست این روش را نادیده بگیریم. این روش زمانی که یک بخش قصد دارد توسط سرویس دیگری متحد شود با استفاده از bindService() خوانده می شود. در اجرای این روش، ما می بایست رابطی را ارائه نماییم که کاربران از آن برای ارتباط با سرویس و بازگشت به IBinder استفاده نمایند. ما می بایست همواره این روش را اجرا نماییم، اما اگر نمی خواهیم که ارتباطی صورت گیرد در این صورت می بایست آنرا به صفر تغییر دهیم.
onCreate(): این روش زمانی که سرویس برای اولین بار ایجاد شده است خوانده می شود. در اینجا تمام تنظیمات سرویس انجام می گیرند. این روش هرگز به طور مجدد خوانده نمی شود.
onDestroy(): سیستم این روش را زمانی اجرا می نماید که سرویس استفاده نشده و در حین نابودی می باشد. این روش به منظور پاک نمودن تمام منابع نظیر رشته ها، شنونده های ثبت شده، دریافت کننده ها و غیره به کار برده می شود. این آخرین فراخوانی می باشد که سرویس دریافت می نماید
مثال
مثال زیر، نحوه پیاده سازی هر کدام از متدهای چرخه حیات سرویس را نشان می دهد. (شکل 2)
![]()
شکل 2
برای آنکه سرویس نوشته شده توسط سیستم عامل اندروید قابل شناسایی و اجرا باشد می بایست در فایل AndroidManifest.xml ثبت گردد و همچنین اگر بخواهیم سرویس نوشته شده از طریق سایر برنامه ها مورد دسترسی قرار نگیرد می بایست از برچسب android:exported استفاده نماییم. در صورت عدم استفاده از این برچسب، سرویس ما توسط تمامی برنامه های موجود در دستگاه اندوردی قابل دسترسی و اجرا خواهد بود. (شکل 3)
![]()
شکل 3
شروع کردن سرویس
ما می توانیم یک سرویس را از یک فعالیت یا یک برنامه دیگر با ارسال Intent به متد startService() آغاز نماییم. سیستم عامل اندروید روش onStartCommand() را فرا می خواند و آن را به Intent انتقال می دهد.
متوقف کردن سرویس
یک سرویس می بایست بعد از اتمام اجرا با فراخواندن متد stopSelf متوقف گردد. با این حال، ما می توانیم با استفاده از روش stopService()، خودمان سرویس را در زمان دلخواه متوقف نمایم.
در اینجا کار ما به اتمام میرسد. امیدواریم نهایت استفاده از این مقاله را برده باشید.
شاد و پیروز باشید.