Skip to main content

KOMPONEN ANDROID SERVICE

Pengenalan Service 
Sebelumnya  telah belajar mengenai activity dan implementasinya. Activity  adalah komponen yang memberikan pengalaman kepada pengguna secara langsung. Pengguna dapat melihat dan berinteraksi diatasnya. Service berada pada sisi yang lain, komponen ini tidak memiliki antarmuka 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 main thread atau ui thread. Bekerja di background bukan berarti ia bekerja secara asynchronous. Service tetap membutuhkan thread terpisah jika kita ingin melakukan proses yang membutuhkan komputasi intensif atau yang memakan waktu.

Contoh pemanfaatan service sudah banyak sekali, antara lain : 
• Aplikasi sosial media atau aplikasi yang memiliki kemampuan untuk menerima push notification. Aplikasi semacam ini pasti memiliki sebuah service yang berjalan dalam posisi stand by untuk selalu menerima pesan yang masuk. 
• Aplikasi chat juga membutuhkan service untuk melakukan pengiriman dan menerima pesan yang dikirimkan 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.

Secara umum, terdapat dua bentuk dari service : 
1. Started 
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. 
2. Bound 
Service jenis ini merupakan tipe service yang dijalankan oleh komponen lain, namun saling mengikat. Hubungan yang terjadi antar kedua komponen tersebut seperti client-server. Bisa saling menerima hasil dan menerima request yang 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. 

Pada bagian ini kita akan sepenuhnya membahas service berjenis started. Tipe service tersebut akan dibagi menjadi dua bagian dalam implementasinya : 
• Kelas service yang inherit langsung kepada kelas Service Ketika sebuah kelas java inherit ke service ingin menjalankan proses yang memakan waktu lama, maka kelas tersebut diharuskan membuat thread terpisah agar tidak memblok ui thread yang ada. Service ini akan selalu hidup di background selama tidak ada komponen yang memanggil stopService() atau dimatikan oleh sistem. 
• Kelas service yang inherit ke IntentService Ini adalah kelas yang sangat memudahkan hidup kita. Dia bersifat fire and forget, ketika ia telah menyelesaikan tugasnya, ia akan mematikan dirinya. 

Poin-poin penting lain tentang service diantaranya: 
• Setiap kelas Java dinyatakan sebuah service bila kelas tersebut inherit/extends ke kelas Service atau IntentService
• Service memiliki life cycle-nya sendiri dan bergantung pada tipe service apa yang digunakan, Started atau bound service.
 

• Untuk menjalankan service dari komponen lain seperti activity, cukup menggunakan startService(Intent)
Sebaliknya untuk mematikan/stop service terdapat dua cara. Pertama stopService(Intent) dijalankan dari komponen yang memanggil dan stopSelf() dari kelas Service itu sendiri. 

Latihan Penerapan Service

Anda sudah paham service secara garis besar berikut pemanfaatannya. Sekarang saatnya kita menerapkannya.

Buat Project baru diAndroid Studio dengan kriteria sebagai berikut : 
    o Nama Project : My Service
    o Target & Minimum Target SDK: Phone, Api level 22: Android 5.1 (Lollipop)
    o Tipe Activity : Empty Activity 


1. Baik, buat proyek baru dengan nama MyService. Pilih Empty Activity dengan pilihan default pada set up proyek. Setelah proyek tercipta, lengkapi activity_main.xml dengan contoh seperti ini : 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<Button
android:id="@+id/btn_start_service"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start Sercive"
android:layout_marginBottom="@dimen/activity_vertical_margin"/>

<Button
android:id="@+id/btn_start_intent_service"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start Intent Service"/>

</LinearLayout>
2. Pada MainActivity.java silakan lengkapi kode-nya menjadi sebagai berikut :
package com.touvan.myservice;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btnStartService;
private Button btnStartIntentService;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnStartService = (Button)findViewById(R.id.btn_start_service);
btnStartService.setOnClickListener(this);
btnStartIntentService = (Button)findViewById(R.id.btn_start_intent_service);
btnStartIntentService.setOnClickListener(this);
}

@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_start_service:
break;

case R.id.btn_start_intent_service:
break;
}
}
}
3. Tampilan yang seharusnya ada pada MainActivity, adalah seperti ini. 


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

5. Selanjutnya pada dialog yang tampil, isikan nama kelas service yang diinginkan. Di sini kita menamainya sebagai OriginService dan 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 didalam tag
<application>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.touvan.myservice">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<service
android:name=".ContohIntentService"
android:exported="false"></service>
<service
android:name=".OriginService"
android:enabled="true"
android:exported="true" />

<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
7. Berkas AndroidManifest sudah dibuat secara otomatis. Dengan demikian kita sudah bisa menjalankan kelas service tersebut. Namun, sebelum menjalankan aplikasi, lengkapi kode pada OriginService menjadi seperti berikut : 
package com.touvan.myservice;

import android.app.Service;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.IBinder;
import android.util.Log;

public class OriginService extends Service {
public static final String ORIGIN_SERVICE = "OriginService";
public OriginService() {
}

@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}

@Override
public int onStartCommand(Intent intent, int flags, int stratId) {
Log.d(ORIGIN_SERVICE,"OriginService Dijalankan");
ProcessAsync mProcessAsync = new ProcessAsync();
mProcessAsync.execute();
return START_STICKY;
}
}
8. Selanjutnya pada MainActivity.java di metode onClick() pada case R.id.btn_start_service tambahkan baris berikut : 

9. Sehingga kode pada metode onClick() menjadi seperti ini : 
    @Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_start_service:
Intent mStartServiceIntent = new Intent(MainActivity.this,OriginService.class);
startService(mStartServiceIntent);
break;

case R.id.btn_start_intent_service:
break;
}
}
10. Sekarang jalankan aplikasi. Klik tombol ‘start service’ dan perhatikan pada lognya. OriginService telah dijalankan dan tidak akan pernah mati sampai dimatikan oleh sistem atau metode stopSelf() atau stopService() dijalankan. 

11. Baik, sekarang kita akan menambahkan sebuah inner class AsyncTask. Ia seakan-akan menjalankan sebuah proses secara asynchronous dan mematikan/menghentikan dirinya sendiri dengan memanggil metode stopSelf(). Lengkapi kodenya menjadi sebagai berikut :
package com.touvan.myservice;

import android.app.Service;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.IBinder;
import android.util.Log;

public class OriginService extends Service {
public static final String ORIGIN_SERVICE = "OriginService";
public OriginService() {
}

@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}

@Override
public int onStartCommand(Intent intent, int flags, int stratId) {
Log.d(ORIGIN_SERVICE,"OriginService Dijalankan");
ProcessAsync mProcessAsync = new ProcessAsync();
mProcessAsync.execute();
return START_STICKY;
}

private class ProcessAsync extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void...params) {
try {
Thread.sleep(3000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Log.d(ORIGIN_SERVICE,"StopService");
stopSelf();
}
}

@Override
public void onDestroy() {
super.onDestroy();
Log.d(ORIGIN_SERVICE,"onDestroy");
}
}
12. Jalankan aplikasinya. Klik tombol ‘start service’ dan perhatikan log-nya. Service dijalankan secara asynchronous dan mematikan dirinya sendiri setelah proses selesai. 

13. Jika berhasil dijalankan, pada log android monitor akan seperti ini :

05-08 07:31:17.104 7831-7831/com.touvan.myservice D/OriginService: OriginService Dijalankan
05-08 07:31:19.502 7831-7831/com.touvan.myservice D/OriginService: StopService
05-08 07:31:19.507 7831-7831/com.touvan.myservice D/OriginService: onDestroy

Masih ingat dengan pembahasan asynctask pada materi sebelumnya ? Pada method onPostExecute() akan memanggil stopSelf() yang berarti akan memberhentikan atau mematikan OriginService dari sistem Android.

Pada titik ini, Anda sudah bisa membuat sebuah service yang berjalan di background. 

1. Sekarang, buat kembali sebuah service dengan nama ContohIntentService dengan cara klik kanan pada package utama project → New → Service → Service (Intent Service). 


2. Pada dialog yang tampil, masukkan nama nama ContohIntentService seperti ini : Klik Finish untuk menyelesaikan proses. Pastikan untuk tidak mencentang include helper. Include helper akan menambahkan metode yang dapat membantu di dalam pembuatan services. Akan tetapi pada modul ini, kita tidak menggunakan metode tersebut.

3. Setelah kelas ContohIntentService diciptakan, terdapat banyak kode autogenerated yang telah disertakan. Kita tidak membutuhkan semua metode tersebut. Sehingga ubah kelas tersebut menjadi seperti contoh di bawah ini :
public class ContohIntentService extends IntentService {
public static String EXTRA_DURATION = "extra_duration";
public static final String TAG = "ContohINtentService";
public ContohIntentService() {
super("ContohIntentService");
}

@Override
protected void onHandleIntent(Intent intent) {
Log.d(TAG,"onHandleIntent");
if (intent!=null) {
}
}
}
4. Skenarionya adalah sebagai berikut : 
o Kita menjalankan IntentService tersebut dengan sebuah obyek Intent dari MainActivity dengan membawa data, dalam konteks ini adalah nilai integer yang menentukan berapa lama background proses dijalankan. 
o ContohIntentService dijalankan, dan kemudian melakukan pemrosesan obyek Intent yang dikirimkan untuk menjalankan background
o Seperti sifatnya, IntentService tidak perlu mematikan dirinya sendiri, secara otomatis ketika proses yang dilakukan selesai, maka, IntentService berhenti dengan sendirinya.

5. Pada ContohIntentService lengkapi kodenya menjadi seperti berikut : 
package com.touvan.myservice;

import android.app.IntentService;
import android.content.Intent;
import android.content.Context;
import android.util.Log;

public class ContohIntentService extends IntentService {
public static String EXTRA_DURATION = "extra_duration";
public static final String TAG = "ContohINtentService";
public ContohIntentService() {
super("ContohIntentService");
}

@Override
protected void onHandleIntent(Intent intent) {
Log.d(TAG,"onHandleIntent");
if (intent!=null) {
int duration = intent.getIntExtra(EXTRA_DURATION,0);
try {
Thread.sleep(duration);
}
catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt();
}
}
}

@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG,"onDestroy");
}
}
6. Selanjutnya pada MainActivity.java di metode onClick() pada case R.id.btn_start_intent_service kita tambahkan 3 baris berikut untuk menjalankan IntentService yang baru saja dibuat. 

Sehingga kode metode onClick() kita menjadi sebagai berikut. 
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_start_service:
Intent mStartServiceIntent = new Intent(MainActivity.this,OriginService.class);
startService(mStartServiceIntent);
break;

case R.id.btn_start_intent_service:
Intent mStartIntentService = new Intent(MainActivity.this,ContohIntentService.class);
mStartIntentService.putExtra(ContohIntentService.EXTRA_DURATION,5000);
startService(mStartIntentService);
break;
}
}
7. Setelah selesai semua, silakan jalankan kembali aplikasinya dan perhatikan proses yang terekam pada log aplikasi di Android Studio. 

05-08 07:42:26.482 7831-7873/com.touvan.myservice D/ContohINtentService: onHandleIntent
05-08 07:42:31.488 7831-7831/com.touvan.myservice D/ContohINtentService: onDestroy

Oke sekian latihan yang telah kita coba...





Comments

Popular posts from this blog

Konfigurasi 1 Server, 1 Router, 2 SW, 4 Client

TUGAS 1 Saya akan membuat konfigurasi pada Cisco Packet Tracer yaitu dengan mengandalkan 1 Server, 2 Switch, 1 Router, serta 4 Client Pertama Kita buat skema jaringannya terlebih dahulu kemudian kita pikirkan dulu konfigurasinya seperti apa dan bagaimana. Nah kalo skemanya sudah kita buat selanjutnya kita mulai konfigurasi “Biar Gak Kelamaan Mikir hehe". Konfigurasi Server terlebih dahulu Disni kita buat IP Servernya yaitu menggunakan IP Static. Kemudian kita ke Services , aktifkan terlebih dahulu (on) pada DHCPnya seperti itu konfigurasi yang saya buat, disitu saya menggunakan default Gateway tapi jika tidak mau ribet cukup masukkan saja DNS Servernya atau IP server yang sudah di buat sebelumnya. Masih di Services , selanjutnya setup DNSnya, saya menggunakan Name Server nya van.com atau anda bisa buat dengan nama yang anda inginkan, kemudian pada Address-nya saya menggunakan IP Servernya. Pada halaman HTTP anda bisa edit

Tutorial Pembuatan PCB Layout Flip Flop Dengan Diptrace

Flip Flop. Flip-flop adalah rangkaian digital yang digunakan untuk menyimpan satu bit secara semi permanen sampai ada suatu perintah untuk menghapus atau mengganti isi dari bit yang disimpan. Prinsip dasar dari flip-flop adalah suatu komponen elektronika dasar seperti transistor, resistor dan dioda yang di rangkai menjadi suatu gerbang logika yang dapat bekerja secara sekuensial. Berikut ini adalah bagaimana membuat rangkaian PCB Layout-nya : 1. Buka software Diptrace terlebih dahulu (pilih PCB Layout). Tampilan awal saat menjalankan Diptrace. 2. Maka tampilan awalnya akan seperti ini. Tampilan awal PCB Layout. 3. Pilih komponen yang akan dibuat untuk rangkaian flip flop. Komponen rangkaian flip flop. 4. Setelah semua komponen dipilih maka selanjutnya kita hubungkan masing-masing komponen dengan (route manual). Komponen rangkaian flip flop yang sudah dihubungkan. 5. Jika tahap ke-4 sudah selesai selanjutnya kita buat backgroundnya

Sistem Keamanan Jaringan Dan Keamanan Informasi

Sistem Keamanan Jaringan Keamanan jaringan adalah suatu cara atau suatu system yang digunakan untuk memberikan proteksi atau perlindungan pada suatu jaringan agar terhindar dari berbagai ancaman luar yang mampu merusak jaringan. Tujuan membuat keamanan jaringan adalah untuk mengantisipasi resiko jaringan berupa bentuk ancaman fisik maupun logic baik langsung ataupun tidak langsung yang dapat mengganggu aktivitas yang sedang berlangsung dalam jaringan. Satu hal yang perlu diingat bahwa tidak ada jaringan yang anti sadap atau tidak ada jaringan yang benar-benar aman. karna sifat jaringan adalah melakukan komuikasi, dan setiap komunikasi dapat jatuh ke tangan orang lain dan di salah gunakan. Oleh sebab itu keamanaan jaringan sangatlah dibutuhkan. Yang harus dilakukan ialah mengenal beberapa ancaman keamanan jaringan. Serangan terhadap keamanan sistem informasi (security attack) akhir-akhir ini seringkali terjadi kejahatan komputer/cyber crime pada dunia maya seringkali di lak