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

4 سال پیش
سرویس در برنامه نویسی اندروید

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

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، با سرویس در برنامه نویسی اندروید (Android Services) آشنا خواهیم شد.

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

 

حالت و توضیحات
۱ Started

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

۲ Bound

وقتی یک مولفه برنامه با فراخوانی ()bindService  به آن متصل می شود ، سرویس محدود می شود. یک سرویس محدود یک رابط سرویس گیرنده-سرور را ارائه می دهد که به اجزای سازنده امکان می دهد با سرویس ارتباط برقرار کنند، درخواست ارسال کنند، نتیجه بگیرند و حتی این کار را در فرایندهای ارتباط بین پردازشی (IPC) انجام دهند.

یک سرویس دارای روش های برگشت چرخه حیات است که می توانید برای نظارت بر تغییرات وضعیت سرویس پیاده سازی کنید و می توانید کار را در مرحله مناسب انجام دهید. نمودار زیر سمت چپ ، چرخه حیات را هنگام ایجاد سرویس با ()startService نشان می دهد  و نمودار سمت راست، چرخه حیات را هنگام ایجاد سرویس با ()bindService نشان می دهد:

 

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

 

کال بک و توضیحات
۱

()onStartCommand

یک سیستم وقتی متغیر دیگری، مانند یک فعالیت، با راه اندازی با ()startService  درخواست می کند، این روش را فراخوانی می کند. اگر این روش را اجرا کنید، وظیفه شماست که وقتی کار سرویس تمام شد، با تماس با روش های stopSelf () یا stopService () متوقف شوید.

۲ ()onBind

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

۳ ()onUnbind

سیستم وقتی این متد را فراخوانی می کند که همه سرویس گیرنده ها از یک رابط خاص منتشر شده توسط سرویس جدا شوند.

۴ ()onRebind

سرویس وقتی این متد را فراخوانی می کند که کلاینت جدیدی به سرویس اضافه می شود، پس از اینکه قبلاً به آن اطلاع داده شده بود که همه اتصالهای داخلی آن قطع شده است

۵ ()onCreate

این سیستم وقتی اولین سرویس با استفاده از ()onStartCommand یا ()onBind ایجاد می شود، این روش را فراخوانی می کند.

۶ ()onDestroy

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

 

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  ایجاد کرده ایم اصلاح کنید –

 

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

در زیر محتوای پرونده فعالیت اصلی تغییر یافته 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 است. این پرونده بر اساس نیازها می تواند یک یا چند روش مرتبط با سرویس را اجرا کند. در حال حاضر ما فقط دو روش را روی ()StartCommand  و ()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 اصلاح شده خود را اجرا کنیم! من تصور می کنم شما AVD خود را هنگام راه اندازی محیط ایجاد کرده اید. برای اجرای برنامه از Android studio، یکی از پرونده های فعالیت پروژه خود را باز کنید و از نوار ابزار روی Android StudioRun Icon کلیک کنید. Android Studio برنامه را روی AVD شما نصب کرده و شروع به کار می کند و اگر با تنظیمات و برنامه هایتان همه چیز خوب باشد، زیر پنجره شبیه ساز نمایش داده می شود.

 

 

اکنون برای شروع سرویس خود، بر روی دکمه Start Service کلیک کنید، این سرویس شروع به کار می کند و طبق برنامه نویسی ما به روش ()onStartCommand، یک پیام Service Started در پایین شبیه ساز به شرح زیر ظاهر می شود –

 

برای توقف سرویس، می توانید روی دکمه Stop Service کلیک کنید.

منبع.

لیست جلسات قبل آموزش برنامه نویسی اندروید

  1. نگاهی کلی به برنامه نویسی اندروید
  2. تنظیمات محیط  در برنامه نویسی اندروید
  3. معماری برنامه نویسی اندروید
  4. اجزای برنامه در برنامه نویسی اندروید
  5. Hello World در برنامه نویسی اندروید
  6. سازماندهی و دسترسی به منابع در برنامه نویسی اندروید
  7. فعالیت در برنامه نویسی اندروید

 

0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه