ورود / ثبت نام سبد خرید 0
سرویس (service) یکی از کامپوننت های اصلی اپلیکیشن های اندرویدی در برنامه نویسی اندروید است که برای پردازش های طولانی در پس زمینه مورد استفاده قرار میگیرد. سرویس حتی با وجود بسته شدن اپلیکیشن باز هم ادامه پیدا میکند و بدون اینکه نیاز باشد در صفحه چیزی نمایش داده بشود در بک گراند کار خود را انجام میدهد که دو حالت دارند :
هر سرویس (Service) برای خود یک چرخه ی حیات (Life Cycle) نیز دارد که با استفاده از متودهای چرخه ی حیات میتوانید عملیات یک سرویس را کنترل کنید و از انها استفاده کنید.در تصویر زیر دیاگرام کاملی از چرخه ی حیات سرویس ها مشاهده میکنید که از متود startService() شروع میشود و در سمت راست تصویر نیز یک سرویس حالت bound شده با متود bindService() گفته میشود.
برای ساختن یک سرویس (service) جدید یک فایل کلاس Java باید درست کنید که از کلاس اصلی Service ارث بری میکند.همانطور که بالاتر هم ذکر شد سرویس ها در برنامه نویسی اندروید متودهای callback زیادی دارد که البته همه ی آن ها ممکن است مورد استفاده قرار نگیرد ولی ما مهم ترین آنها را در جدول زیر شرح داده ایم.
onCreate()
این متود زمانی اجرا میشود که سرویس برای اولین بار توسط متودهای onStartCommand() یا onBind() ساخته میشود.
onDestroy()
این متود زمانی اجرا میشود که یک سرویس دیگر استفاده نشود یا بصورت کامل از بین برود. سرویس باید طوری پیاده سازی شود که با استفاده از این متود برای پاکسازی resource هایی همانند threads, registered listeners, receivers و... استفاده کند.
مثال زیر اسکلت یک سرویس را نشان میدهد که شما را با هر یک از متود های callback مربوط به سرویس ها آشنا میکند :
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() { } }
مثال شماره ی یک :
در این مثال عملی شما بصورت قدم به قدم یادمیگیرید که چطور سرویس ها را برنامه نویسی کنید و در برنامه نویسی اندروید از آنها استفاده کنید :
در زیر کدهای ویرایش شده ی MainActivity.java را میبینید. این فایل میتواند شامل تمام متود های لازم باشد که ما در اینجا دو متود startService() و stopService() اضافه کردیم که باعث start و stop شدن سرویس میشوند :
mport android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.View; public class MainActivity extends Activity { String msg = "Android : "; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(msg, "The onCreate() event"); } 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)); } }
در زیر کدهای فایل MyService.java را میبینید این فایل میتواند شامل یک یا چند متود از متود های اساسی سرویس ها در اندروید باشد. در مثالی که ما زدیم فقط دو متود به نام های onStartCommand و onDestroy استفاده کردیم :
import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.support.annotation.Nullable; import android.widget.Toast; /** * Created by TutorialsPoint7 on 8/23/2016. */ public class MyService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { 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 را مشاهده میکنید همانطور که میبینید در این مثال تگ <service.../> را برای معرفی کردن سرویس خود استفاده کردیم :
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ir.example.avasam.myapplication"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <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>
کدهای زیر برای فایل layout هستند که در مسیر res/layout/activity_main.xml قرار دارد :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Example of services" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:textSize="30dp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tutorials point " android:textColor="#ff87ff09" android:textSize="30dp" android:layout_above="@+id/imageButton" android:layout_centerHorizontal="true" android:layout_marginBottom="40dp" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageButton" android:src="@drawable/abc" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button2" android:text="Start Services" android:onClick="startService" android:layout_below="@+id/imageButton" android:layout_centerHorizontal="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Stop Services" android:id="@+id/button" android:onClick="stopService" android:layout_below="@+id/button2" android:layout_alignLeft="@+id/button2" android:layout_alignStart="@+id/button2" android:layout_alignRight="@+id/button2" android:layout_alignEnd="@+id/button2" /> </RelativeLayout>
حال بعد از اینکه همه ی کدهای بالا را به درون پروژه ی خود منتقل کردید و ویرایش های لازم را هم انجام دادید وقت آن رسیده که اپ را اجرا کنید و نتیجه ی آنرا در امولاتور ببینید.
زمانی که اپلیکیشن را در اندروید استودیو اجرا کنید و در امولاتور نتیجه را ببینید مشابه تصویر زیر خواهد بود :
حال برای استارت شدن سرویس کافیست روی دکمه ی START SERVICE کلیک کنید زمانی که این دکمه فشار داده میشود متود onStartCommand() بصورت خودکار اجرا میشود بعد از آن یک متن در صفحه ی اپ به شکل تصویر زیر نمایش داده میشود:
محصولات برگزیده مناسب شما