آموزش استفاده از سرویس ها در اندروید بخش اول

[two_third]

در این مقاله سری آموزش های اندروید به سراغ سرویس ها در اندروید رفتیم.یک سرویس کامپوننتی است که برای انجام عملیات long-running (طولانی مدت) در پس زمینه  بدون نیاز به تعامل با کاربر اجرا می شود و حتی اگر اپلیکیشن destroy شود، باز هم ادامه پیدا می کند. یک سرویس همیشه در یکی از دو حالت زیر می باشد:

  • Started – یک سرویس زمانی Started است که یکی از اجزای اپلیکیشن مانند اکتیویتی با دستور startService() آن را فراخوانی کردره باشد. زمانی که سرویس در این حالت باشد، سرویس در پس زمینه اجرا می شود و حتی اگر کامپوننت فراخواننده آن هم از بین برود، بدون هیچ محدودیتی به کار خود ادامه می دهد.
  • Bound – یک سرویس زمانی Bound می شود که یکی از اجزای اپلیکیشن با دستور bindService() به آن متصل شود. یک bound service یک واسط کلاینت-سروری است که به کامپوننت ها امکان تعامل با سرویس، ارسال درخواست، دریافت نتایج را می دهد.
[/two_third] [one_third_last]

سرویس ها در اندروید

[/one_third_last]

 

هر سرویسی متدهای life cycle callbackای دارد که می توانیم آن ها را پیاده سازی کنیم تا با توجه به آن ها حالت های مختلف سرویس را بررسی کرده و متناسب با آن ها پاسخی فراهم کنیم. نمودار زیر در سمت چپ، چرخه حیات سرویس را زمانی که از طریق startService() ایجاد می شود نشان می دهد و نمودار سمت راست چرخه حیات سرویس را زمانی که از  طریق bindService() ایجاد می شود نشان می دهد.

سرویس ها در اندروید

برای ایجاد سرویس، یک کلاس جاوا ایجاد می کنیم که از کلاس پایه Service یا یکی از زیرکلاس های موجود آن ارث بری می کند. کلاس پایه Service متدهای callback مختلفی را تعریف می کند که مهم ترین آن ها را در زیر مشاهده می کنید. همانطور که می دانید، لازم نیست همه متدها را پیاده سازی کنید. اگرچه، مهم است که بدانید هر یک از آن ها چه کاری انجام می دهد و با پیاده سازی آن ها مطمئن خواهید شد که اپلیکیشن شما همانطور کار خواهد کرد که کاربر انتظار دارد.

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

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

0nUnbind() – سیستم این متد را زمانی فراخوانی می کند که همه ارتباط کلاینت ها از یک اینترفیس خاصی که سرویس منتشر کرده است، قطع شود.

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

onCreate() – زمانی که سرویس برای اولین بار با استفاده از onStartCommand() یا onBind() ایجاد می شود، سیستم این متد را فراخوانی می کند. این فراخوانی برای one-time set-up لازم است.

onDestroy() – زمانی که سرویس برای مدت نسبتا طولانی استفاده نشود، سیستم این متد را فراخوانی می کند. سرویس شما باید این متد را برای آزاد کردن منابعی مانند threadها، listenerها، receiverها و… پیاده سازی کند.

Service زیر هر یک از متدهای life cycle را نشان می دهد.


package com.mspsoft;

import android.app.Service;
import android.os.IBinder;
import android.content.Intent;
import android.os.Bundle;

public class HelloService extends Service {

/** indicates how to behave if the service is killed */
int mStartMode;

/** interface for clients that bind */
IBinder mBinder;

/** indicates whether onRebind should be used */
boolean mAllowRebind;

/** Called when the service is being created. */
@Override
public void onCreate() {

}

/** The service is starting, due to a call to startService() */
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return mStartMode;
}

/** A client is binding to the service with bindService() */
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}

/** Called when all clients have unbound with unbindService() */
@Override
public boolean onUnbind(Intent intent) {
return mAllowRebind;
}

/** Called when a client is binding to the service with bindService()*/
@Override
public void onRebind(Intent intent) {

}

/** Called when The service is no longer used and is being destroyed */
@Override
public void onDestroy() {

}
}

 

 

مسعود شریفی پور

از سال 88 که با برنامه نویسی آشنا شدم خیلی علاقه مند بودم یک بستر آموزشی بسازم در فضای وب و به انتشار آموزش های در این زمینه بپردازم.حالا یک تیم داریم و با قدرت رو به جلو حرکت میکنیم.

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

    یونس پاسخ

    very nicee :-) , بسیار عا لی خیلی زحمت کشیدید

    علی پاسخ

    بسیار عا لی خیلی زحمت کشیدید

    جواد پاسخ

    با سلام و خسته نباشید

    ممنون از آموزشهای خوبتون و از شما تشکر میکنم

    این آموزشها ادامه هم میدین یا نه؟

    بازم ممنون

      مسعود شریفی پاسخ

      بله ادامه دارند.

    رضا پاسخ

    عاااااااااااااالیه...

    علی پاسخ

    سلام.واقعا وبسایت خوبی دارید

ما یک پرسشنامه‌ی کوچولو داریم، که قول میدیم وقتتون رو خیلی نمی‌گیره، ولی کلی به ما کمک می‌کنه، چون هم assessment مونه ,و هم شما به ما در این زمینه کمک میکنید.بزن بریم