سرویس ها (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 دیدگاه

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

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

-- بارگیری کد امنیتی --