no-img
سامنتا

سرویس ها در اندروید ( Service )


سامنتا
دانلودهای ویژه
اطلاعیه های سایت

ادامه مطلب

سرویس ها در اندروید ( Service )
zip
اردیبهشت ۲۲, ۱۳۹۵

سرویس ها در اندروید ( Service )


 

فایل ویدیویی این آموزش بطور کامل با زبان فارسی و با کیفیت بالا اضافه شد میتوانید از لینک زیر دانلود کنید : 

40,000RIAL – خرید
 

 

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

هر سرویس اساسا" از دو حالت اساسی تشکیل شده است :

حالتتوضیحات
Startedوقتی یک سرویس شروع میکند . از طریق کامپوننت های دیگر مانند اکتیویتی و از طریق صدا زدن متد startService() شروع به فعالیت میکند. زمانی که سرویس شروع کرد ، به طور نامحدودی در پس زمینه میتواند ادامه پیدا کند حتی اگر اکتیویتی بسته شود منظور اکتیویتی هست  که این سرویس را صدا کرده و اعلام کرده است که آغاز به کار کند
Bound 

 

سرویس ها نیز همانند اکتیویتی ها ، چرخه ی حیات خاص خود را دارند ، متدهایی که در طول چرخه ی حیات سرویس اجرا میگردند به برنامه نویسان کمک میکنند تا سرویس های خود را پیاده سازی کنند . در دیاگرام زیر به چرخه ی حیات سرویس اشاره میکنیم که با متد startService() ساخته میشوند :

چرخه ی حیات سرویس ها

چرخه ی حیات سرویس ها

برای ساخت یک سرویس در اندروید شما باید یک کلاس جاوا بسازید و از  کلاس Service ارث بری کنید . یک سرویس دارای متدهای مختلفی هست و تعدادی از مهمترین متدهای یک سرویس در جدول زیر آمده است ، شما مجبور نیستید تمام متدهای زیر را ایجاد کنید ولی بسته به نیاز خود میتوانید از آنها بهره ببرید ، به هر حال یادگیری موارد زیر در آینده حتما برای شما کاربردی خواهد بود : 

متدتوضیحات
onStartCommand()این متد زمانی توسط سیستم اجرا میگردد که سرویس توسط کامپوننت های دیگر مانند یک اکتیویتی ، اجرا شود . این اجرا توسط فراخوانی متد startService() انجام میگیرد . اگر شما از این متد استفاده کنید مسئولیت متوقف کردن سرویس بعد از اتمام کارش به عهده ی خودتان هست ، متوقف کردن سرویس توسط متد های stopSelf() یا stopService() انجام میگیرد 
onBind()

این متد توسط سیستم زمانی که بخواهید سرویس با کامپوننت های دیگر اندروید عمل bind را انجام دهد باید با صدا زدن متدbindService() این عمل را انجام میدهد، اگر شما از این متد استفاده میکنید باید یک userinterface جهت برقراری ارتباط با کاربر استفاده کنید ، باید مقدار بازگشتی نیز شی IBinder  باشد .

شما بایستی همیشه این متد را به کار ببرید ولی اگر نمیخواهید عمل bind انجام بگیرد کافیست مقدار null برگردانید! 

onUnbind()زمانی این متد توسط سیستم اجرا میشود که تمام کاربرها ، از یک رابط کاربری سرویس خاص ، قطع شده باشند . 
onRebind()این متد زمانی رخ میدهد که کاربر جدیدی به رابط کاربری سرویس متصل شود . همانطور که در بالا گفتم زمان رخداد onUnbind(Intent) کاربران از سرویس قطع رابطه شده بودند 
onCreate()این متد زمانی رخ میدهد که سرویس برای اولین بار فراخوانی و ساخته شود با استفاده از متد های onStartCommand() یا onBind()
onDestroy()این متد زمانی رخ میدهد که استفاده از سرویس به پایان رسیده و اصطلاحا" سرویس نابود شده است . سرویس باید از این متد استفاده کند برای اینکه بتواند منابعی مانند  threads, registered listeners, receivers را آزاد کند

 

مثال زیر اسکلتی از یک سرویس اندرویدی را نمایش میدهد که از متدهای چرخه های حیات سرویس استفاده کرده است : 

package com.tutorialspoint;
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() { }
}

مثال برای سرویس ها در اندروید 

این مثال شما را با مراحل ساده ی ساخت یک سرویس در اندروید یاری خواهد داد . مثال Hello World که در ابتدا ساختیم را در نظر بگیرید و مراحل زیر را روی آن اعمال کنید : 

قدمتوضیحات
۱شما باید از محیط اندروید استودیو استفاده کنید و نام پروژه ی خود را My Application انتخاب کنید نام پکیج com.example.My Application همانطور که در مثال Hello World هم گفته شده است
۲فایل MainActivity.java را جهت افزودن startService()  وstopService()  ویرایش کنید  
۳یک فایل جدید با نام MyService.java در زیر پکیج  com.example.My Application بسازید . این فایل از کلاس و متدهای سرویس اندروید استفاده خواهد کرد (implementation )
۴سرویس خود را درون فایل AndroidManifest.xml  با استفاده از تگ <service…/>معرفی کنید . هر برنامه بسته به نیاز خودش میتواند یک یا چندین سرویس داشته باشد بدون اینکه تداخلی به هم داشته باشند 
۵فایل res/layout/activity_main.xml را ویرایش کنید و دو عدد دکمه به روی صفحه اضافه کنید
۶نیازی به تغییر  res/values/strings.xml  نیست اندروید استودیو خودش از مقادیر رشته ای مراقبت میکند
۷برنامه را روی ماشین مجازی اجرا کنید (run)  و نتیجه را مشاهده کنید

 

در زیر کد ویرایش شده ی فایل src/com.example.My Application/MainActivity.java را مشاهده میکنید . این فایل میتواند حاوی تمام متدهای چرخه ی حیات باشد ولی ما فقط دو متد startService() و stopService() را برای شروع و متوقف کردن برنامه اضافه کرده ایم .

package com.example.My Application;
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.My Application/MyService.java خواهند بود . این فایل میتواند شامل یک یا چند متد مورد نیاز سرویس های اندرویدی باشد . ما دو متد را به این سرویس اضافه میکنیم onStartCommand()  و onDestroy() :

package com.example.My Application;
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  نیز به شکل زیر خواهد بود میبینید که تگ  <service…/>  را برای معرفی کردن سرویس جدید اضافه کردیم تا معرفی شود : 

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.MyApplication" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="13" android:targetSdkVersion="22" /> <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 نیز به شکل زیر خواهد بود که دو عدد دکمه نیز اضافه کردیم : 

<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="Samenta.ir " 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>

و کدهای زیر نیز محتویات res/values/strings.xml هستند که دو مقدار جدید اضافه شده است : 

<resources> <string name="app_name">My Application</string> <string name="menu_settings">Settings</string> <string name="title_activity_main">MainActivity</string>
</resources>

بیایید برنامه ویرایش شده ی Hello World! را اجرا کنیم نتیجه ی کار تقریبا به شکل زیر خواهد بود : 

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

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

 

و بعد از اینکه دکمه ی Start Service کلیک میشود : 

Service در اندروید

Service در اندروید

 




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

تیم سامنتا 75 نوشته در سامنتا دارد . مشاهده تمام نوشته های

دیدگاه ها


3 پاسخ به “سرویس ها در اندروید ( Service )”

  1. صمد گفت:

    ایشالا که موفق باشی آقای نیکزاد سایتتون عالیه

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *