service در اندروید استودیو

آموزش قبلی | | | | | آموزش بعدی

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

۱شروع شده

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

۲ محدود شده

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

نمودار زیر سمت چپ ، چرخه زندگی را هنگام ایجاد سرویس با ()startService نشان می دهد و نمودار سمت راست ، چرخه زندگی را هنگام ایجاد سرویس با ()bindService نشان می دهد.

چرخه عمر سرویس ها در اندروید

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

۱ در()StartCommand

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

۲ ()onBind

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

۳ ()onUnbind

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

۴ ()onRebind

این سیستم زمانی متصل می شود که سرویس گیرنده های جدید به سرویس متصل شده باشند ، پس از اینکه قبلاً به آن اطلاع داده شده بود که همه اتصال (onUnbind (Intent آن قطع شده است.

۵ ()onCreate

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

۶ ()onDestroy

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

مثال
این مثال شما را با طی مراحل ساده هدایت می کند تا نحوه ایجاد سرویس Android خود را نشان دهید. مراحل زیر را دنبال کنید تا برنامه Android را که در فصل Hello World ایجاد کرده ایم اصلاح کنید.

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

<?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 در پایین شبیه ساز به شرح زیر ظاهر می شود: