آموزش برنامه نویسی اندروید- سرویس ها در اندروید

  • توسط king2
  • شنبه , ۲۲ مهر ۱۳۹۶
  • 231 بازدید
  • 0

سرویس اندروید

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

حالت ها

۱

Started

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

۲

Bound

یک سرویس زمانی که یک اجزا برنامه bindService ()   به آن متصل می شود، محدود می شود.

 

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

سرویس اندروید

مطلب پیشنهادی: سازماندهی و دسترسی به منابع اندروید

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

فراخوان
۱ onStartCommand()

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

۲ onBind()

سیستم هنگامی که یکی از اجزا می خواهد با service مرتبط شود، bindService() فراخوانی می کند.

۳ onUnbind()

سیستم هنگامی که تمام پردازشگرها  که از یک رابط خاص منتشر شده اند توسط service قطع شوند ، این روش را می پذیرد.

۴ onRebind()

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

۵ onCreate()

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

۶ onDestroy()

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

service زیر هر یک از روش های چرخه عمر را نشان می دهد:

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 دنبال کنید:

 

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

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

در زیر محتوای اصلی فایل اصلی MainActivity.java اصلاح شده است. این فایل شامل هر یک از روش های چرخه عمر است. از روش startService ()  و stopService ()  برای شروع و توقف Service استفاده شده.

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

سرویس اندروید

اکنون برای شروع سرویس خود، بر روی دکمه Start Service کلیک کنید. این دکمه سرویس را شروع می کند و به عنوان روش  onStartCommand () در برنامه نویسی است. بعد از کلیک کردن بر روی دکمه پیام Service Started در پایین شبیه ساز به صورت زیر ظاهر می شود.

سرویس اندروید

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

منبع: tutorialspoint

 

  • facebook
  • googleplus
  • twitter
  • linkedin
  • linkedin
قبلی «
بعدی »

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

تازه های طراحی سایت

بهینه سازی وبسایت

دانستی های سایت