Sabtu, 18 Juli 2020

Komponen Android Service



Komponen Android Service

Pengertian Service
  • Sebelumnya telah belajar mengenai activity dan implementasinya. Activity adalah komponen yang memberikan pengalaman kepada pengguna secaralangsung. Pengguna dapat melihat dan berinteraksi diatasnya.
  • Service beradap ada sisi yang lain, komponen ini tidak memiliki antar muka dan bahkan pengguna tidak akan akan tahu bagaimana dia bekerja. Pengalaman yang diberikan oleh service hanya berupa proses yang tidak terlihat. Ia digunakan untuk menjalankan beragam macam proses yang memakan waktu lama.

  • Walaupun berjalan secara background, pada dasarnya service dan komponen Android lainnya berjalan pada satu proses dan thread yang sama yaitu mainthread atau uithread. Bekerja di background bukan berarti ia bekerja secara asynchronous. Service tetap membutuhkan threadter pisah jika kita ingin melakukan proses yang membutuhkan komputasi intensif atau yang memakan waktu.
Contoh Pemanfaatan Service
  • Aplika sisosial media atau aplikasi yang memiliki kemampuan untuk menerima push notification. Aplikasi semacam ini pasti memiliki sebuah service yang berjalan dalam posisi standby untuk selalu menerima pesan yang masuk.
  • Aplikasi chat juga membutuhkan service untuk melakukan pengiriman dan menerima pesan yang di kirimkan oleh pengguna.
  • Aplikasi pemutar musik juga melakukan hal yang sama. Untuk memberikan pengalaman yang lebih baik kepada pengguna, aplikasi pemutar musik biasanya meletakkan proses streaming atau memainkan musik di komponen service dengan tetap mempertahankan integrasi dengan komponen lain, misalnya notifikasi. dll
2 Bentuk Service

  • Service berjenis ini adalah tipe yang dijalankan oleh komponen lain, misal activity. Sekali dijalankan, service ini akan berjalan selama belum dimatikan atau proses yang dijalankan selesai. Sevice akan tetap berjalan walaupun komponen yang lain dimatikan oleh sistem Android. Umumnya penggunaan service ini adalah untuk melakukan proses yang tidak memberikan nilai balik ke komponen yang memanggilnya. Contohnya adalah, mengunduh atau mengunggah berkas.
  • Bound Service jenis ini merupakan tipe service yang dijalankan oleh komponen lain, namun saling mengikat. Hubungan yang terjadi antar kedua komponen tersebut seperticlient-server. Bisa saling menerima hasil dan menerimarequestyang ada. Pada service ini dimungkinkan terjadi proses IPC (Interprocess Communication).Service ini akan tetap berjalan di background selama masih ada komponen lain yang mengikatnya. Jika tidak, maka Service akan dimatikan oleh sistem. Aplikasi pemutar musik merupakan salah satu jenis aplikasi yang mengimplementasikan service jenis ini.
Life Sycle Service



Latihan Penerapan service
Untuk melihat jalannya service, buatkan tampilan seperti disamping.
  1. Untuk melihat jalannya service, buatkan tampilan seperti disamping.
    Nama project: MyService
    Activity: Empty Activity

2. Lengkapi MainActivity.xml

3. Lengkapi MainActivity.java


4. buat kelas service bernama Origin Service dengan cara klik kanan pada package project→New→Service→Service.Origin Service akan inherit(extends) kepada kelas Service.

5. Selanjutnya pada dialog yang tampil, isikan nama kelas service yang diinginkan. Di sini kita menamainya sebagai Origin Servicedan biarkan exported dan  enabled tercentang. Klik Finish untuk menyelesaikan proses.


6. Selanjutnya, buka berkas AndroidManifest.xml pada package manifest dan perhatikan isi berkas tersebut. Service yang baru saja kita buat sudah ada di dalam tag <application>:


7. Berkas AndroidManifest sudah dibuat secara otomatis. Dengan demikian kita sudah bisa menjalankan kelas service tersebut. Namun, sebelum menjalankan aplikasi, lengkapi kode padaOriginService menjadi seperti berikut :





Lanjutan Script


12. Jalankan aplikasinya. Kliktombol ‘startservice’ dan perhatikan log-nya. Service di jalankan secara asynchronous dan mematikan dirinya sendiri setelah proses selesai.
13.Jika berhasil dijalankan, pada log androiod monitor akan seperti ini : 09-2 209:52:25.028 10209-10209/com.contoh.myserviceapp D/OriginService: OriginService dijalankan 09-2 209:52:28.074 10209-10209/com.contoh.myserviceapp D/OriginService: StopService 09-22 09:52:28.078 10209-10209/com.contoh.myserviceapp D/OriginService:onDestroy()


Latihan: Penggunaan Service Di Alarm Manager

Ada kalanya kita membutuhkan perlu suatu mekanisme untuk mengulang sebuah proses di waktu tertentu. Misalnya, kita ingin memiliki fungsi pengingat (reminder) pada aplikasi event, jadwal tayang film di bioskop, atau aplikasi alarm untuk mengingatkan kita untuk bangun di pagi hari. Di sinilah alarm manager berperan penting.

Alarm manager akan memberikan kemudahan bagi aplikasi untuk melakukan operasi berbasis waktu di luar daur hidup aplikasi itu sendiri.

Contohnya seperti yang baru saja di sebutkan di atas. Umumnya alarm memiliki beberapa karakteristik, antaralain:
  1. Dapat menjalankan obyek intent berdasarkan waktu dan interval yang ditentukan.
  2. Bisa bekerja dengan baik dengan broadcast receiver untuk menjalankan komponen lain seperti service untuk melakukan operasi tertentu.
  3. Alarm berjalan di luar daur hidup aplikasi induknya sehingga kita bisa merancan gfungsi alarm untuk melakukan sebuah aksi ketika aplikasi sedang tidak di jalankan bahkan ketika peranti dalam keadaan idle atau sleep.
  4. Esensi utama dari alarm manager adalah untuk meminimalkan penggunaan resource dan mengmhindari penggunaan timer dan background service yang berkepanjangan untuk melakukan operasi atau aksi yang di butuhkan.

Penggunaan alarm manager yang baik adalah dengan menerapkan cara berikutini:

  1. Lakukan hanya untuk proses dilokal
  2. Jaga frekuensi alarm yang dijalankan dengan interval yang tidak pendek
  3. Jika tidak terlalu penting, hindari penggunaan tipe alarm yang dapat membangunkan peranti seperti RTC_WAKEUP
  4. Jika alarm manager digunakan untuk menjadwal kan scheduling task yang terhubung kejaringan dan melakukan request ke server, misalnya unduh data terbaru atau sinkronisasi data, maka hindari penggunaan setRepeating() dan gunakan setInExactRepeating() dengan penggunaan tipe alarm berbasis ELAPSED_REALTIME. Pendekatan tersebut merupakan strategi untuk mengelompokkan proses alarm dari aplikasi yang berbeda dengan dijalankan secara bersamaan agar lebih menghemat daya baterai.

Komponen Android Intent

Komponen Android 
Intent 

Intent adalah mekanisme untuk melakukan sebuah action dan komunikasi antar
komponen aplikasi misal activity, services, dan broadcast receiver Ada tiga penggunaan
umum intent dalam aplikasi Android yaitu

1. Memindahkan satu activity ke activity lain dengan atau tidak membawa data

2. Menjalankan background service, misalnya melakukan sinkronisasi ke server dan
    menjalankan proses berulang periodic scheduler task

3. Mengirimkan obyek broadcast ke aplikasi yang membutuhkan Misal, ketika aplikasi
    membutuhkan proses menjalankan sebuah background service setiap kali aplikasi
    selesai melakukan booting Aplikasi harus bisa menerima obyek broadcast yang
    dikirimkan oleh sistem Android untuk event booting tersebut
Intent merupakan objek tipe android.content.Intent. Melalui metode startActivity() yang digunakan untuk memulai sebuah activity lain.
Intent dibagi menjadi 2, yaitu :
  1. Explicit Intent berfungsi untuk mengaktifkan komponen-komponen dalam satu aplikasi yang sama. Misalnya seperti : Berpindah Activity.
  2. Implicit Intent berfungsi untuk memanggil fungsi activity yang sudah ada di fungsi internal android seperti Dial Number, Open Browser dan lainnya.
Tutorial kali ini, saya akan mempraktekan implementasi dari Intent menggunakan Android Studio.

Langkah - langkah

  • Explicit dan Implicit Intent

Pertama-tama, buatlah dua buah activity pada Android Studio Anda. Lalu tambahkan baris program pada :

activity_main.xml

Berikut baris program pada activity_main.xm :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.acer.myapplication.PageOne">

    <Button
        android:id="@+id/explicitintent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Klik disini untuk Explicit Intent"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="150dp"/>

    <Button
        android:id="@+id/implicitintent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Klik disini untuk Implicit Intent"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="200dp"/>

</RelativeLayout>

activity_page_two.xml

Berikut baris program pada activity_page_two.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.acer.myapplication.PageTwo">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Ini adalah halaman kedua"
        android:textSize="30dp"
        android:layout_marginTop="150dp"
        android:layout_alignParentStart="true"
        android:layout_marginStart="30dp" />

</RelativeLayout>

PageOne.java

Berikut baris program untuk PageOne.java :

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class PageOne extends AppCompatActivity implements View.OnClickListener {
    Button explicitintent;
    Button implicitintent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        explicitintent = (Button)findViewById(R.id.explicitintent);
        explicitintent.setOnClickListener(this);
        implicitintent = (Button)findViewById(R.id.implicitintent);
        implicitintent.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.explicitintent:
                Intent explicit = new Intent(PageOne.this, PageTwo.class);
                startActivity(explicit);
                break;
            case R.id.implicitintent:
               Intent implicit = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.codepolitan.com"));
                startActivity(implicit);
                break;
            default:
                break;
        }
    }
}
  • Intent dengan Extra

Intent dengan extra atau putExtra() adalah sebuah metode dari Intent yang digunakan untuk mengirimkan data ke activity yang dituju. Data yang akan dikirim pun tipenya dapat bermacam-macam, bisa berbentuk String, angka (integer, float, double), ArrayList, boolean, array, character, dan sebagainya. Namun tidak semua tipe data support untuk dikirim antar Activity, tipe data yang berukuran besar seperti gambar (image bitmap) atau file, tidak dapat dipassing antar Activity melalui metode ini.

MainActivity.java

Berikut baris program untuk MainActivity.java :
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final EditText name = (EditText) findViewById(R.id.edit_textdata);
        Button button = (Button) findViewById(R.id.button_submitintent);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this,Main2Activity.class);
                i.putExtra("name", name.getText().toString());
                startActivity(i);
            }
        });
    }
}

Main2Activity.java

Berikut baris program untuk Main2Activity.java :
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        TextView t = (TextView) findViewById(R.id.text_viewdata);
        Bundle bundle=getIntent().getExtras();
        String s=bundle.getString("name");
        t.setText(s);

    }
}

activity_main.xml

Berikut baris program pada activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Ini halaman utama Activity 1"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <EditText
        android:layout_marginTop="20dp"
        android:id="@+id/edit_textdata"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Data"/>

    <Button
        android:id="@+id/button_submitintent"
        android:text="Intent with extra"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

activity_main2.xml

Berikut baris program pada activity_main2.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Ini halaman kedua Activity 2"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:layout_margin="15dp"
        android:id="@+id/text_viewdata"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Data"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>

Hasil Output

Explicit Intent
explixit

Hasil Output

Implicit Intent

Hasil Output

Intent dengan Extra
Sumber : 

Komponen Android Service

Komponen Android Service Pengertian Service Sebelumnya telah belajar mengenai activity dan implementasinya. Activity adalah kom...