Android - Layanan

SEBUAH serviceadalah komponen yang berjalan di latar belakang untuk melakukan operasi yang berjalan lama tanpa perlu berinteraksi dengan pengguna dan berfungsi bahkan jika aplikasi dimusnahkan. Sebuah layanan pada dasarnya dapat mengambil dua keadaan -
Sr.No. Status & Deskripsi
1

Started

Sebuah layanan adalah startedsaat komponen aplikasi, seperti aktivitas, memulainya dengan memanggil startService () . Setelah dimulai, layanan bisa berjalan di latar belakang tanpa batas waktu, meskipun komponen yang memulainya dimusnahkan.

2

Bound

Sebuah layanan adalah boundketika komponen aplikasi mengikatnya dengan memanggil bindService () . Layanan terikat menawarkan antarmuka klien-server yang memungkinkan komponen berinteraksi dengan layanan, mengirim permintaan, mendapatkan hasil, dan bahkan melakukannya di seluruh proses dengan komunikasi antarproses (IPC).

Sebuah layanan memiliki metode callback siklus hidup yang dapat Anda implementasikan untuk memantau perubahan dalam status layanan dan Anda dapat melakukan pekerjaan pada tahapan yang sesuai. Diagram di sebelah kiri berikut menunjukkan siklus proses saat layanan dibuat dengan startService () dan diagram di sebelah kanan menunjukkan siklus proses saat layanan dibuat dengan bindService (): (image courtesy: android.com)

Untuk membuat layanan, Anda membuat kelas Java yang memperluas kelas dasar Layanan atau salah satu subkelas yang sudah ada. ItuServicekelas dasar mendefinisikan berbagai metode panggilan balik dan yang paling penting diberikan di bawah ini. Anda tidak perlu menerapkan semua metode callback. Namun, penting bagi Anda untuk memahami masing-masing dan menerapkannya yang memastikan aplikasi Anda berperilaku seperti yang diharapkan pengguna.

Sr.No. Callback & Deskripsi
1

onStartCommand()

Sistem memanggil metode ini ketika komponen lain, seperti aktivitas, meminta agar layanan dimulai, dengan memanggil startService () . Jika Anda mengimplementasikan metode ini, Anda bertanggung jawab untuk menghentikan layanan setelah pekerjaannya selesai, dengan memanggil metode stopSelf () atau stopService () .

2

onBind()

Sistem memanggil metode ini saat komponen lain ingin mengikat layanan dengan memanggil bindService () . Jika Anda menerapkan metode ini, Anda harus menyediakan antarmuka yang digunakan klien untuk berkomunikasi dengan layanan, dengan mengembalikan objek IBinder . Anda harus selalu menerapkan metode ini, tetapi jika Anda tidak ingin mengizinkan pengikatan, Anda harus mengembalikan null .

3

onUnbind()

Sistem memanggil metode ini ketika semua klien telah terputus dari antarmuka tertentu yang diterbitkan oleh layanan.

4

onRebind()

Sistem memanggil metode ini ketika klien baru telah terhubung ke layanan, setelah sebelumnya diberitahu bahwa semua telah terputus di onUnbind (Intent) -nya .

5

onCreate()

Sistem memanggil metode ini saat layanan pertama kali dibuat menggunakan onStartCommand () atau onBind () . Panggilan ini diperlukan untuk melakukan pengaturan satu kali.

6

onDestroy()

Sistem memanggil metode ini saat layanan tidak lagi digunakan dan sedang dimusnahkan. Layanan Anda harus menerapkan ini untuk membersihkan sumber daya apa pun seperti utas, pendengar terdaftar, penerima, dll.

Layanan kerangka berikut mendemonstrasikan setiap metode siklus hidup -

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() {

   }
}

Contoh

Contoh ini akan memandu Anda melalui langkah-langkah sederhana untuk menunjukkan cara membuat Layanan Android Anda sendiri. Ikuti langkah-langkah berikut untuk memodifikasi aplikasi Android yang kami buat di bab Contoh Hello World -

Langkah Deskripsi
1 Anda akan menggunakan Android StudioIDE untuk membuat aplikasi Android dan menamainya sebagai Aplikasi Saya di bawah paket com.example.tutorialspoint7.myapplication seperti yang dijelaskan di bab Contoh Hello World .
2 Ubah file aktivitas utama MainActivity.java untuk menambahkan metode startService () dan stopService () .
3 Buat file java baru MyService.java di bawah paket com.example.My Application . File ini akan menerapkan metode terkait layanan Android.
4 Tentukan layanan Anda dalam file AndroidManifest.xml menggunakan tag <service ... />. Sebuah aplikasi dapat memiliki satu atau lebih layanan tanpa batasan apa pun.
5 Ubah konten default file res / layout / activity_main.xml untuk menyertakan dua tombol dalam layout linier.
6 Tidak perlu mengubah konstanta apa pun di file res / values ​​/ strings.xml . Android studio menangani nilai string
7 Jalankan aplikasi untuk meluncurkan emulator Android dan verifikasi hasil perubahan yang dilakukan dalam aplikasi.

Berikut adalah konten file aktivitas utama yang dimodifikasi MainActivity.java. File ini dapat menyertakan setiap metode siklus hidup dasar. Kami telah menambahkan metode startService () dan stopService () untuk memulai dan menghentikan layanan.

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));
   }
}

Berikut ini adalah konten dari MyService.java. File ini dapat menerapkan satu atau beberapa metode yang terkait dengan Layanan berdasarkan persyaratan. Untuk saat ini kita hanya akan mengimplementasikan dua metode onStartCommand () dan 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();
   }
}

Berikut adalah konten yang dimodifikasi dari file AndroidManifest.xml . Di sini kami telah menambahkan tag <service ... /> untuk memasukkan layanan kami -

<?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>

Berikut akan menjadi konten res/layout/activity_main.xml file untuk menyertakan dua tombol -

<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>

Ayo coba jalankan modifikasi kita Hello World!aplikasi yang baru saja kita modifikasi. Saya berasumsi bahwa Anda telah membuat fileAVDsaat melakukan pengaturan lingkungan. Untuk menjalankan aplikasi dari Android studio, buka salah satu file aktivitas proyek Anda dan klik

ikon Jalankan dari bilah alat. Android Studio menginstal aplikasi pada AVD Anda dan memulainya dan jika semuanya baik-baik saja dengan penyiapan dan aplikasi Anda, itu akan ditampilkan mengikuti jendela Emulator -

Sekarang untuk memulai layanan Anda, mari klik Start Servicetombol, ini akan memulai layanan dan sesuai pemrograman kami dalam metode onStartCommand () , pesan Layanan Dimulai akan muncul di bagian bawah simulator sebagai berikut -

Untuk menghentikan layanan, Anda dapat mengklik tombol Stop Service.