سرویس ها (Services)در اندروید
سرویس فرایندی است که در پس زمینه اپلیکیشن برای مدت زمان طولانی اجرا می شود و نیازی به تعامل با کاربر ندارد بطوری که این فرایند را می توان تا زمانی که حتی خود برنامه در دیوایس نصب شده است ادامه داد.
برای ایجاد یک سرویس کافی است یک کلاس با نام اختیاری ساخته و آن را به نوع Service گسترش دهیم :
class MyService extends Service { }
متدهای بکار رفته در این کلاس عبارت است از :
OnStartCommand()
یک سرویس هنگامی شروع می شود که یک کامپوننت برنامه، مانند یک اکتیویتی، با startService() شروع می شود. پس از شروع، یک سرویس می تواند در پس زمینه به طور نامحدود اجرا شود، حتی اگر مولفه هایی که آن را شروع کرده است، نابود شود.
Onbind()
متدی است که با استفاده از آن می توانیم Thread دیگری را برای اتصال به سرویس ایجاد کنیم تا بتوان از این طریق با سروری که مدنظرماست ارتباط برقرار کند . بعبارت دیگر در یک سرویس هنگامی که یک کامپوننت برنامه به bindService () متصل و محدود می شود. یک سرویس مبتنی بر سرور – کلاینت فراهم می شود که اجزای سازنده را قادر می سازد تا با سرویس ارتباط برقرار کنند.
oncreate()
این متد زمانی فراخوانی می شود که یک سرویس برای بار اول اجرا می شود و از این طریق سیستم بخواهد یک نمونه از آن را ایجاد کند.
onDestroy()
این متد زمانی اجرا می شود که سرویس مورد نظر برای مدت زمان زیادی مورد استفاده قرار نگرفته باشد. بعبارت دیگر این متدهنگامی که سرویس برای مدت زمان طولانی مورد استفاده قرار نگیرد از بین می رود.
مثال :
اگر در داخل برنامه اکلیپس یا اندروید استودیو قرار دارید پروژه جدیدی را ایجاد کنید
اکلیپس :File ⇒ New Android ⇒ Application Project
اندروید استودیو :File ⇒ New ⇒ New Project
اما اگر هنوز برنامه خود را باز نکرده اید یکی از برنامه های فوق را باز نموده و بعد از تعیین مشخصات(نامگذاری) ، تعیین حداقل sdk و نوع اکتیویتی (blank یا Empty) ، نام اکتیویتی ابتدایی و اصلی خود را همان MainActivity قرار دهید. بعد از لود کامل برنامه، کلاس جدیدی را از پکیج اصلی به پروژه اضافه کنید و نام آن را myService بگذارید.( برای این کار روی پکیج اصلی راست کلیک کرده و از منوی new گزینه java را انتخاب کنید و در پنجره ظاهر شده نام آن را MyService بگذارید). کلاس مذکور را باز کرده و آن به نوع Service گسترش می دهیم :
class MyService extends Service {
}
بر روی سرویس دکمه های Alt و Enter را زده و متدهای آن را implement می کنیم که به شکل زیر خواهد بود.
import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.support.annotation.Nullable; import android.widget.Toast; /** * Created by hamed on 06/29/2017. */ public class MyService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { 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(); } }
سپس به سراغ کلاس MainActivity رفته و کدهای زیر را به آن اضافه می کنیم:
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startService(new Intent(getBaseContext(), MyService.class)); } }
در نهایت فایل AndroidManifest.xml را باز نموده و سرویس را برای برنامه تعریف می کنیم:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.site.psrd.ServiceAndroid">
<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>
<activity
android:name=".OtherActivity"
android:label="@string/title_activity_other"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<service android:name=".MyService" />
</application>
</manifest>
حال می توانید پروژه را اجرا کرده و آن را در پروژه خودتان به هرشکلی که دوست دارید بکارببرید.
کپی برداری از محتوای سایت psrd، ممنوع بوده و پیگرد قانونی دارد. (تنها استفاده شخصی کاربران ، مجاز است) (کپی برداری توسط سایر وب سایت ها غیرقانونی بوده و در صورت رویت به ستادسازماندهی اطلاع داده خواهد شد.
0 دیدگاه