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

۱برای ایجاد یک سرویس نیاز دارید کلاس خود را از کلاس پایه Service ارث بری کنید سپس با پیاده‌کردن آن، یک سرویس ایجاد کنید. در این نوشته با بعضی روش‌ها و خصوصیات اساسی این کلاس آشنا می‌شویم.

  • onStart این روش زمانی اجرا می‌شود که سرویس شما توسط یک Activity فراخوانی شود و با فراخوانی روش startService بخواهید سرویس مورد نظر را اجرا کنید.
  • onBind زمانی این روش فراخوانی می‌شود که بخواهیم جزیی از سیستم را به سرویس مورد نظر ارجاع دهیم؛ مثلا قصد دارید یک فایل صوتی را توسط یک سرویس پخش کنید.

۲سرویس ها دارای چرخه عمر می باشند که شکل زیر به صورت کامل آن را تشریح کرده است:

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

۳برای ایجاد یک سرویس، بایذ یک کلاس جاوا ایجاد کنید و سرویس ها بر پایه کلاس باشد. سرویس ها بر پایه کلاس، دارای توابع گوناگونی از callback می باشند که برخی از مهمترین آنها عبارتند از:

  • onStartCommand(): سیستم زمانی آ« را فراخوانی می کند که یک کامپوننت دیگر مانند یک activity، درخواست می کند که سرویس اجرا شود، با دستور startService(). اگر شما از این روش استفاده کنید، وظیفه شما است که سرویس را وقتی که کارش تمام می شود متوقف کنید و این کار با دستور stopSelf() یا stopService() امکان پذیر است.
  • onBind: زمانی این روش فراخوانی می‌شود که بخواهیم جزیی از سیستم را به سرویس مورد نظر ارجاع دهیم؛ مثلا قصد دارید یک فایل صوتی را توسط یک سرویس پخش کنید.
  • onCreate این روش زمانی فراخوانی می‌شود که یک سرویس برای دفعه اول اجرا شود و سیستم بخواهد یک نمونه از آن را ایجاد کنید (این متد قبل از onStartCommand و
  • onBind فراخوانی می‌شود)، اگر سرویس مورد نظر در حال اجرا باشد، این متد هیچ وقت فراخوانی نمی‌شود.
  • onDestroy این روش زمانی اجرا می‌شود که سرویس مورد نظر برای مدت زمان زیاد مورد استفاده قرار نگرفته باشد یا به صورت دستی سرویس Stop شده باشد.

۴حالا می خواهیم در یک مثال آموزش دهیم که چگونه می توانید سرویس خود را ایجاد کنید. قبل از انجام کار به نکات زیر دقت کنید:

  • برای ساخت نرم افزار اندروید باید از Eclipse IDE استفاده کنید. باید با کمک نرم افزار یک پروژه جدید ایجاد کنید.
  • باید فایل MainActivity.java را تغییر دهیم و دو دستور startService() و stopService() را به آن اضافه کنیم.
  • باید یک فایل جاوا جدید به نام MyService.java، در زیر پکیج com.example.helloworld ( در معرفی اکتیویتی ها توضیح داده شده است ) ایجاد کنید.
  • تعریف کردن سرویس خود در AndroidManifest.xml با استفاده از تگ <service…/>.
  • اضافه کردن دو تا دکمه در res/layout/activity_main.xml.
  • تعریف کردن سرویس شروع و توقف در res/values/strings.xml.

۵حالا به مسیر src/com.example.helloworld/MainActivity.java رفته و کد زیر را به آن اضافه کنید:

package com.example.helloworld;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.content.Intent;
import android.view.View;
public class MainActivity extends Activity {
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
   }
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.activity_main, menu);
      return true;
   }
   // Method to start the service
   public void startService(View view) {
      startService(new Intent(getBaseContext(), MyService.class));
   }

// Method to stop the service
public void stopService(View view) {
stopService(new Intent(getBaseContext(), MyService.class));
}
}

۶به مسیر src/com.example.helloworld/MyService.java رفته و کدهای زیر را به آن اضافه کنید:

package com.example.helloworld;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
public class MyService extends Service {
   @Override
   public IBinder onBind(Intent arg0) {
      return null;
   }
   @Override
   public int onStartCommand(Intent intent, int flags, int startId) {
      // Let it continue running until it is stopped.
      Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
      return START_STICKY;
   }
   @Override
   public void onDestroy() {
      super.onDestroy();
      Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
   }
}

۷حالا باید در AndroidManifest.xml تگ سرویس را معرفی کنید:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.helloworld"
   android:versionCode="1"
   android:versionName="1.0" >
   <uses-sdk
      android:minSdkVersion="8"
      android:targetSdkVersion="15" />
   <application
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >
       <activity
           android:name=".MainActivity"
           android:label="@string/title_activity_main" >
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER"/>
           </intent-filter>
       </activity>
       <service android:name=".MyService" />
   </application>
</manifest>

۸حالا دکمه های مورد نظر خود را در res/layout/activity_main.xml وارد می کنیم.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >
   <Button android:id="@+id/btnStartService"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="@string/start_service"
   android:onClick="startService"/>
   <Button android:id="@+id/btnStopService"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="@string/stop_service"
   android:onClick="stopService" />
</LinearLayout>

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

<resources>
    <string name="app_name">HelloWorld</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">MainActivity</string>
    <string name="start_service">Start Service</string>
    <string name="stop_service">Stop Service</string>
</resources>

۱۰. حالا برنامه را اجرا کنید.

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