آشنایی با ساختار سرویسها در سیستمعامل اندروید
جام جم آنلاین: برای ایجاد یک سرویس نیاز دارید کلاس خود را از کلاس پایه Service ارث بری کنید سپس با پیادهکردن آن، یک سرویس ایجاد کنید. در این نوشته با بعضی روشها و خصوصیات اساسی این کلاس آشنا میشویم.
انجام بعضی عملیات باید به صورت پشتپرده باشد؛ برای مثال شما یک برنامه نوشتهاید که قرار است در آن فایلی صوتی اجرا شود.
اگر از برنامه خارج شوید دیگر نمیتوانید به پخش موسیقی ادامه دهید؛ ضمنا کنترل آن بر عهده Activity مربوط است که در آن فایل صوتی در حال اجراست؛ در نتیجه کنترل برنامه و پخش موسیقی آن سخت میشود. راهحل چیست؟
پیش از هرچیز با ساختار سرویسها در سیستمعامل اندروید آشنا میشویم.
برای ایجاد یک سرویس نیاز دارید کلاس خود را از کلاس پایه Service ارث بری کنید سپس با پیادهکردن آن، یک سرویس ایجاد کنید. در این نوشته با بعضی روشها و خصوصیات اساسی این کلاس آشنا میشویم.
onStart این روش زمانی اجرا میشود که سرویس شما توسط یک Activity فراخوانی شود و با فراخوانی روش startService بخواهید سرویس مورد نظر را اجرا کنید.
onBind زمانی این روش فراخوانی میشود که بخواهیم جزیی از سیستم را به سرویس مورد نظر ارجاع دهیم؛ مثلا قصد دارید یک فایل صوتی را توسط یک سرویس پخش کنید.
با ایجاد یک کلاس که از کلاس پدر IBinder به ارث رسیده باشد و با Bindکردن آن به سرویس، فایلهای خود را پخش کنید و کنترل آن را به دست بگیرید.
onCreate این روش زمانی فراخوانی میشود که یک سرویس برای دفعه اول اجرا شود و سیستم بخواهد یک نمونه از آن را ایجاد کنید (این متد قبل از onStartCommand و onBind فراخوانی میشود)، اگر سرویس مورد نظر در حال اجرا باشد، این متد هیچ وقت فراخوانی نمیشود.
onDestroy این روش زمانی اجرا میشود که سرویس مورد نظر برای مدت زمان زیاد مورد استفاده قرار نگرفته باشد یا به صورت دستی سرویس Stop شده باشد.
حال به کد زیر دقت کنید :
public class MyService extends Service {
MediaPlayer player;
@Override
public IBinder onBind(Intent intent) {
return null; }
@Override
public void onCreate() {
player = MediaPlayer.create(this, R.raw.braincandy);
player.setLooping(false); }
@Override
public void onDestroy() {
Toast.makeText(this, “My Service Stopped”, Toast.LENGTH_LONG).show();
player.stop(); }
@Override
public void onStart(Intent intent, int startid) {
Toast.makeText(this, “My Service Started”, Toast.LENGTH_LONG).show();
player.start(); } }
در کد بالا ما یک سرویس ایجاد کردهایم که یک شیء MediaPlayer را در خود دارد. با شروع به کار سرویس اجرا میشود و با پایان یافتن، سرویس نیز پایان مییابد.
حال باید سرویس مورد نظر خود را با فایل مانیفست به برنامه و سیستمعامل اندروید معرفی کنیم. برای این کار کافی است در تگ application کد زیر را قرار دهید:
«service android:enabled=”true” android:name=”.MyService” /»
سپس برای شروع و خاتمه دادن به سرویس کافی است از روشهای startService و stopService فراخوانی کنیم. ما در فرم خود دو دکمه داریم؛ یکی برای شروع و دیگری برای پایان دادن به کار سرویس. در رویداد کلیک آنها کد زیر را قرار میدهیم.
public void onClick(View src) {
switch (src.getId()) {
case R.id.buttonStart:
startService(new Intent(this, MyService.class));
break;
case R.id.buttonStop:
stopService(new Intent(this, MyService.class));
break; } }
همان طور که در کدهای بالا مشاهده میکنید، ما برای سرویس خود یک شیء Binder تعریف نکردیم، اما اگر این شیء را تعریف کنیم، میتوانیم با ایجاد یک شیء از کلاس ServiceConnection کنترل سرویس را بر اساس آن شیء Binder به دست بگیریم.
برای مثال هر زمان که MediaPlayer به حالت Stop رفت یا در پخش آن خطا رخ داد، سرویس مورد نظر به صورت خودکار به حالت stop میرود.
امیربهاءالدین سبطالشیخ
jamejamonline.ir – 22 – RSS Version
مطالبتان خوبه اما خیلی مختصر! من میخوام بدونم دراندرویدازکدام نوع سیستم عامل استفاده شده؟