در این مقاله می خواهیم نحوه پیاده سازی سرویس در اندروید (Android Service) را به صورت پروژه محور به شما آموزش دهیم که شامل ساخت سرویس در اندروید، انواع سرویس اندروید، متدهای سرویس های اندروید می باشد. پس با این مقاله از مرجع آموزش برنامه نویسی اندروید الکامکو همراه باشید.
سرویس اندروید چیست و چکار می کند؟
سرویس در اندروید (Android Service) کامپوننتی در اندروید است که بدون تعامل با کاربر، اجرای پردازش هایی که طولانی مدت هستند را در پس زمینه (Background) انجام می دهد و حتی در صورت از بین رفتن برنامه نیز کار می کند و این اجراها را کاربر نمی بیند.
در واقع سرویس اندروید به معنای یک قسمت از برنامه اندروید است که به صورت پسزمینه (background) اجرا میشود و برای ارائه خدماتی به کاربران بدون نیاز به باز بودن برنامه در حال اجرا، طراحی شده است. سرویس اندروید میتواند برای انجام کارهای مختلفی مانند پخش موسیقی، دانلود فایل، ارسال پیامک یا اعلانهایی که به کاربر نشان داده میشوند، استفاده شود.
سرویسهای اندروید میتوانند با استفاده از کلاس Service در اندروید پیادهسازی شوند. در طراحی سرویسهای اندروید باید به موضوعاتی مانند مدیریت حافظه، اجرای درست و بهینه، زمانبندی اجرا و مدیریت منابع دقت کرد.
اجرای سرویس اندروید در پس زمینه یعنی چی؟
منظور از اجرا در پس زمینه این است که مهم نیست برنامه باز باشد یا بسته. یعنی بعد از اجرای سرویس، حتی اگر کاربر از برنامه ما خارج شد و برنامه دیگری را باز کرد هم سرویس در پشت صحنه به کار خود ادامه میدهد. به طور خلاصه میتوان گفت سرویسها هیچ وابستگی به چرخه حیات Activity ندارد.
همچنین بخوانید » دوره asp .net core مهارت محور با ساخت پروژه های حرفه ای از پایه تا فوق پیشرفته
چگونه میتوان سرویسهای اندروید را توسعه داد؟
برای توسعه سرویسهای اندروید، شما میتوانید از روشهای مختلفی مانند استفاده از کتابخانهها یا ابزارهای موجود در اندروید استفاده کنید. در ادامه، چند مورد از روشهای توسعه سرویسهای اندروید را بررسی میکنیم:
۱. استفاده از کلاس Service: بهترین روش برای توسعه سرویسهای اندروید استفاده از کلاس Service است. این کلاس امکان اجرای سرویسها در پسزمینه را فراهم میکند.
۲. استفاده از IntentService: IntentService یک نوع خاص از Service است که برای اجرای کارهای زمانبری مانند دانلود فایلها و یا پخش فایلهای صوتی و تصویری به کار میرود. در این نوع سرویس، کارها به صورت خودکار در یک نخ جداگانه اجرا میشوند.
۳. استفاده از JobScheduler: JobScheduler یک ابزار اندروید است که به شما امکان مدیریت و زمانبندی سرویسهای پسزمینه را میدهد. این ابزار به شما امکان مشخص کردن زمان اجرای سرویسها در بازههای زمانی مشخص را میدهد.
۴. استفاده از Firebase Cloud Messaging: این ابزار به شما امکان ارسال پیامهای پوش به دستگاههای کاربران را میدهد و برای پیادهسازی سرویسهای اندروید مفید است.
۵. استفاده از JobIntentService: این نوع سرویس، یک ترکیب از IntentService و JobScheduler است و به شما امکان اجرای کارهای زمانبری و پسزمینه را با کنترل بهتری میدهد.
در کل، توسعه سرویسهای اندروید به دلیل محدودیتهای موجود در سیستمعامل اندروید، نیاز به دقت بالا و رعایت استانداردهای مناسب دارد. بهتر است قبل از شروع به کدنویسی، مستندات رسمی اندروید را مطالعه کنید و با استفاده از ابزارها و کتابخانههای مناسب، سرویسهای بهینه و با کارایی بالا را پیادهسازی کنید.
آشنایی با انواع سرویس ها در اندروید :
در اندروید، سرویسها به عنوان یکی از اجزای اصلی برنامهها به کار میروند. سرویسها میتوانند برای اجرای کارهای پسزمینه و بدون نیاز به حضور کاربر در برنامه استفاده شوند. در ادامه، انواع سرویسهای موجود در اندروید را بررسی میکنیم:
۱. سرویس معمولی (Normal Service): این نوع سرویس در حالت پیشفرض، در همان نخ اصلی برنامه اجرا میشود و برای اجرای کارهای زمانبری به کار میرود.
۲. سرویس وابسته به فراخوانی (Bound Service): در این نوع سرویس، برنامهها به سرویسها وصل شده و فراخوانی میکنند. این نوع سرویس برای ارائه خدمات به برنامهها استفاده میشود.
۳. سرویس شبه-وابسته به فراخوانی (Foreground Service): در این نوع سرویس، برنامهها به سرویسها وصل شده و فراخوانی میکنند. اما در این نوع سرویس، برای جلوگیری از توقف سرویسها بدون اطلاع کاربر، یک نوتیفیکیشن در نوار وضعیت نمایش داده میشود.
۴. سرویس محلی (Local Service): در این نوع سرویس، که برای برنامههایی با استفاده از Service استفاده میشود، سرویس در همان فرآیند برنامه اجرا میشود و فقط به عنوان یک کلاس برنامهنویسی شناخته میشود.
۵. سرویس از راه دور (Remote Service): در این نوع سرویس، سرویس در فرآیند جداگانهای اجرا میشود و برای برنامههای مختلفی قابل دسترسی است.
۶. سرویس پیشرفته (IntentService): در این نوع سرویس، که از کلاس Service ارثبری میکند، همه کارها به صورت متوالی در یک نخ اصلی اجرا میشوند و به صورت خودکار متوقف میشوند.
در کل، انتخاب نوع سرویس مناسب برای برنامههای اندروید بستگی به نیازهای خاص برنامه دارد. بهتر است قبل از شروع به کدنویسی، نیازهای برنامه را به دقت بررسی کنید و سپس نوع سرویس مناسب را انتخاب کنید.
ساخت یک سرویس در اندروید استودیو چگونه است؟
برای ایجاد یک سرویس در اندروید (Android Service) ، یک کلاس جاوا ایجاد کنید که کلاس اصلی Service اندروید یا یکی از زیر کلاسهای موجود در آن را گسترش می دهد. اصلی ترین کلاس Service اندروید متد های callback مختلفی را تعریف می کند که در ادامه می خواهیم به مهم ترین آنها اشاره کنیم و نیازی نیست شما بخواهید همه این متد ها را پیاده سازی و اجرا کنید ولی خب اینکه با هر کدام آشنایی داشته باشید بسیار مهم است تا بتوانید با استفاده از اطلاعات بدست آمده از این سرویس های اندروید، مواردی را انتخاب کنید که نیاز برنامه شما را تامین کنند.
آشنایی با متدهای سرویس اندروید:
()onStartCommand :
یک سیستم زمانی این متد را فراخوانی می کند که مولفه ی دیگری مانند یک اکتیویتی (activity)، با فراخوانی ()startService درخواست کند که سرویس آغاز شود. در صورتی که شما این متد را پیاده سازی کنید، متوقف کردن سرویس اندروید بعد از پایان شدن کارش، به عهده شماست. اتمام کار با فراخوانی متد های ()stopSelf یا ()stopService انجام می شود.
()onBind:
سیستم ، این متد را زمانی فراخوانی می کند که یک مولفه دیگر بخواهد با فراخوانی ()bindService به سرویس متصل شود. در صورت پیاده سازی این متد، شما باید با برگرداندن یک شیء IBinder ، واسطی را ایجاد کنید که کلاینت ، از آن برای برقراری ارتباط با سرویس استفاده کند. باید همیشه این متد را پیاده سازی کنید، ولی در صورتی که نخواهید اجازه ی اتصال بدهید، باید null را برگردانید.
()onUnbind :
سیستم این متد را زمانی فراخوانی می کند که اتصال همه ی کلاینت ها، از یک واسط خاص منتشر شده به وسیله ی سرویس (service) قطع شود. این متد بعد از اینکه سیستم از طریق :
(onUnbind(Intent :
متوجه شود که اتصال همه سرویس ها قطع شده است ، اجرا می شود.
()onRebind :
سیستم این متد را زمانی فراخوانی می کند که سرویس برای اولین بار توسط ()StartCommand یا ()onBind ایجاد شود. این فراخوانی یک بار در طول راه اندازی انجام می شود.
()onDestroy :
سیستم این متد را زمانی فراخوانی می کند که سرویس، دیگر مورد استفاده قرار نگیرد و از بین برود. سرویس (service) شما باید این کار را برای پاک کردن تمام منابع مانند thread ، شنود کننده های ثبت شده (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 Example ایجاد کردیم، مراحل زیر را دنبال کنید:
مرحله اول: برای ایجاد اپلیکیشن اندرویدی خود از Android StudioIDE استفاده کنید و آن را تحت پکیج My Application نامگذاری کنید. همان طور که در مثال بخش Hello World Example شرح داده شد، تحت پکیج Hello World Example، HelloWorld بنامید.
مرحله دوم: فایل activity اصلی MainActivity.java را به متد های startService() و stopService() تغییر دهید.
مرحله سوم: یک فایل جاوای جدید MyService.java را تحت پکیج com.example.helloworld ایجاد کنید. این فایل شامل پیاده سازی متد های مربوط به سرویس اندرویدی خواهد بود.
مرحله چهارم: سرویس خود را با استفاده از تگ <service…/> ، در فایل AndroidManifest.xml تعریف کنید. یک اپلیکیشن بدون هیچ محدودیتی می تواند یک یا تعداد بیشتری سرویس (service) داشته باشد.
مرحله پنجم: محتوای پیش فرض فایل res/layout/activity_main.xml را تغییر دهید به طوری که شامل دو دکمه در صفحه بندی خطی (linear layout) باشد.
مرحله ششم: دو ثابت start_service و stop_service را در فایل res/values/strings.xml تعریف کنید. نیاز به تغییر ثابت فایل res/values/strings.xml نیست. (اندروید استودیو از مقادیر رشته ای مراقبت می کند)
مرحله هفتم: اپلیکیشن را در شبیه سازی اندروید (emulator) اجرا کنید و بررسی کنید که چه تغییراتی در اپلیکیشن اعمال شده است.
در کد زیر محتوای فایل activity اصلی MainActivity.java را مشاهده می کنید. این فایل می تواند شامل هر کدام از متد های چرخه حیات اصلی باشد. ما متد های ()startService و ()stopService را برای شروع و متوقف کردن سرویس اضافه کرده ایم.
package com.example.tutorialspoint7.myapplication; import 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 را پیاده سازی کنیم.
package com.example.tutorialspoint7.myapplication; 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="com.example.tutorialspoint7.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>
در کد زیر محتوای فایل 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>
حالا نوبت به آن رسیده که اپلیکیشن تغییر یافته ی مثال Hello World! را اجرا کنیم، من فرض می کنم که شما ADV خود را در طول نصب محیط ایجاد کرده باشید. برای اینکه پروژه خودتان را در اندروید استودیو اجرا کنید یکی از فایل های activity پروژه ی خود را باز کنید و بر روی آیکن Run از نوار ابزار خود کلیک کنید.
اندروید استودیو (Android Studio) اپلیکیش را بر روی AVD شما نصب می کند و آن را راه اندازی می کندو در صورتی که همه ی موارد مربوط به تنظیمات و برنامه شما درست باشد، در صفحه امولاتور دو دکمه با عناوین start service و stop service ظاهر می شود.
حالا برای استارت زدن سرویس خود، بر روی دکمه Start Service کلیک کنید، این کار سرویس شما را آغاز می کند و با توجه به کد های برنامه نویسی شده در متد ()onStartCommand پیغام Service Started (به معنای سرویس آغاز شد)، در بخش انتهایی امولاتور (یا شبیه ساز) نمایش داده می شود.
به دنبال یادگیری برنامهنویسی اندروید هستید؟
دوره های مرتبط با برنامه نویسی اندروید الکامکو را به شما پیشنهاد می کنیم، به دلایل زیر ↓
- دسترسی همیشگی به فایل های دوره به علاوه پشتیبانی رایگان ۳ ماهه با قابلیت تمدید
- از آنجایی که اندروید استودیو پلتفرم اصلی گوگل برای طراحی اپلیکیشن اندروید است، آموزش ها در راستای آموزش اندروید استودیو پیاده سازی شده است.
- این پکیج ها همواره در حال آپدیت هستند و جدیدترین نسخه از فیلم های آموزش برنامه نویسی مرتبط با دوره ها در پنل شما در سایت الکامکو قرار می گیرد.
- آموزش ها به صورت پروژه محور هستند و از هر گونه گزافه گویی خودداری شده است و نیاز به پیش نیاز های یادگیری برنامه نویسی اندروید هم نیست.
- محتوای این پکیج ها از کیفیت بالای تصاویر و صدا برخوردارند.
- از طریق راه های ارتباطی و پشتیبانی ۲۴ ساعته می توانید با ما در ارتباط باشید.
- چند جلسه از فیلم های آموزشی هر دوره به صورت رایگان برای دانلود در دسترس شما قرار دارد که ابتدا از کیفیت کار مطمئن شوید سپس پکیج ها را خریداری نمایید.
- سر فصل های دوره بر اساس سیلابس درسی گوگل طبقه بندی شده اند.
- خیلی از مواردی که سایر آموزشگاه ها به صورت جداگانه می فروشند ما همه را در همین دوره ها به صورت پکیجی برای شما جمع آوری کردیم.
- انجام انواع تمرین ها و پروژه ها در طول دوره ها، ورود آسان شما به بازار کار برنامه نویسی اندروید را فراهم می کنند.
- سورس کد تمامی پروژه های انجام شده در اختیاز شما قرار می گیرد.
- بعد از خرید هر دوره می توانید فورا به دوره ها دسترسی داشته باشید.
بخش های دوره آموزش ساخت برنامه اندروید با جاوا در اندروید استودیو
- بخش اول : مقدمه . آموزش جاوا
- بخش دوم : مفاهیم مقدماتی
- بخش سوم : آموزش کامل ریسایکر ویو (RecyclerView)
- بخش چهارم : مفاهیم کاربردی (قسمت اول)
- بخش پنجم : کار با دیتابیس و انواع فایل و ذخیره سازی در اندروید
- بخش ششم : مفاهیم کاربردی (قسمت دوم)
- بخش هفتم : آموزش کامل PHP
- بخش هشتم : آموزش HTML – CSS – Bootstrap
- بخش نهم : آموزش کامل کار با سرور در اندروید استودیو
- بخش دهم: مفاهیم تکمیلی
- بخش یازدهم : آموزش کامل کار با نقشه
- بخش دوازدهم : پروژه نهایی
- سرفصل های اندروید بصوت کامل
همچنین ببینید» همه دوره های برنامه نویسی اندروید مطابق با آموزش جاوا با اندروید استودیو در راستای ساخت اپ های اندرویدی
مقدمه و معرفی دوره آموزش کاتلین
- آشنایی با زبان کاتلین
- قوانین و مفاهیم پایه برای یادگیری زبان کاتلین
- مقایسه جاوا و کاتلین
- آموزش نصب اندروید استودیو
- شروع کار با اندروید استودیو
- آشنایی اولیه با سیستم عامل Android
- بررسی ایمولیتور (شبیه ساز) و انواع آن
- ساخت ایمولیتور در اندروید استودیو
- شناخت ابزارهای برنامه نویسی Android
- انتخاب ابزار مناسب برنامه نویسی اندروید
- آشنایی با معماری سیستم عامل Android
- آموزش نصب نرم افزار های مورد نیاز جهت برنامه نویسی Android
- شروع طراحی در اندروید استودیو
- اجرای برنامه در شبیه ساز
- آموزش مفاهیم شی گرایی در برنامه نویسی (Object Oriented Programming)
- آموزش کامل برنامه نویسی با زبان کاتلین (kotlin)
- برای مشاهده ادامه سرفصلها روی دوره کلیک کنید
همچنین بخوانید » سایر ثبت نام دوره های کاتلین | لیست کتاب آموزش برنامه نویسی اندروید با کاتلین | کاتلین بهتر است یا فلاتر | کاتلین بهتره یا جاوا
پکیج اموزش جامع برنامه نویسی اندروید شامل دوره های جاوا و کاتلین می باشد. همچنین دارای ۷ دوره حرفه ای دیگر برای تبدیل شدن به یک متخصص اندروید کامل می باشد.
بخش های مختلف دوره جامع متخصص اندروید
- بخش اول : آموزش برنامه نویسی اندروید با جاوا
- بخش دوم : آموزش حرفه ای طراحی UI/UX در اندروید
- بخش سوم : آموزش زبان برنامه نویسی کاتلین از صفر تا صد و پروژه محور
- بخش چهارم : اندروید پلاس (آموزش مفاهیم ضروری در اندروید)
- بخش پنجم : آموزش جامع معماری MVP در اندروید با ساخت پروژه اپلیکیشن خبری فول امکانات
- بخش ششم : آموزش جامع معماری MVVM در اندروید با چندین پروژه حرفه ای
- بخش هفتم : آموزش ساخت بازی در اندروید استودیو
- بخش هشتم : آموزش پرداخت درون برنامه کافه بازار
- بخش نهم : آموزش ساخت اپلیکیشن فروشگاهی فول امکانات
بخش های دوره آموزش فلاتر
- بخش اول : آموزش برنامه نویسی به زبان Dart
- بخش دوم : آموزش UI/UX – رابط کاربری و تجربه کاربری در فلاتر
- بخش سوم : مفاهیم کاربردی
- بخش چهارم : پیش نیاز بخش سرور
- بخش پنجم : آموزش کامل کار با سرور
- بخش ششم : مفاهیم پیشرفته
- بخش هفتم : مفاهیم تکمیلی
- بخش هشتم : طراحی و ساخت وبسایت فروشگاهی
- بخش نهم : طراحی و ساخت اپلیکیشن فروشگاهی
همچنین بخوانید » همه دوره های فلاتر | تفاوت React Native و Flutter | آینده Flutter چگونه است؟ | لیست کتاب های اموزش فریمورک flutter | فیلم های آموزش فلاتر پروژه محور رایگان | نصب فلاتر | آموزش زبان دارت