Memahami Activity dengan Melihat Catatan Log

Untuk membuat suatu 'activity', kita membuat suatu file Java yang melakukan 'extends' class 'AppCompatActivity' seperti berikut:
package com.example.memahamiactivity;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(tag, "Ini adalah onCreate() event");
}
Class tersebut akan me-load komponen UI dengan menggunakan file XML yang ada di dalam folder
"res/layout/". Dalam contoh tersebut kita akan me-load UI dari file "activity_main.xml":
setContentView(R.layout.activity_main);
Setiap 'activity' yang buat adalam app kita harus di-deklarasikan dalam file "AndroidManifest.xml", seperti berikut:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.memahamiactivity">

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

</manifest>

Class 'AppCompatActivity' akan mendefinisikan rangkaian events yang mengendalikan siklus hidup suatu 'activity'. Class tersebut akan mendefinisikan event-event seperti berikut:
  • onCreate() - Dipanggil ketika 'activity' pertama kali dibuat.
  • onStart() - Dipanggil ketika 'activity' tampil ke depan sehingga terlihat oleh user.
  • onResume() - Dipanggil ketika 'activity' mulai berinteraksi dengan user.
  • onPause() - Dipanggil ketika 'activity' yang sedang aktif menjadi 'pause' (jeda) dan 'activity' sebelumnya tampil ke depan/aktif kembali.
  • onStop() - Dipanggil ketika 'activity' tidak lagi terlihat oleh user.
  • onDestroy() - Dipanggil sebelum 'activity' di-destroy oleh sistem (baik secara manual maupun oleh sistem untuk mempertahankan level memory).
  • onRestart() - Dipanggil ketika 'activity' sudah di-stop dan kemudian di-restart lagi.
Secara default, 'activity' yang dibuat akan berisi event 'onCreate()'. Di dalam 'event handler' ini seharusnya tempat kita menaruh kode-kode yang akan membantu untuk menampilkan elemen-elemen UI di layar.



Cata terbaik memahami siklus hidup 'activity' adalah dengan membua latihan project baru yang mengimplementasikan berbagai event tersebut dan kemudian mencoba 'activity' dengan berbagai macam interaksi dengan user, seperti latihan berikut ini:

1. Buat project baru dengan nama: "MemahamiActivity".

2. Dalam file 'MainActivity.java', kita tambahkan kode berikut ini:
package com.example.memahamiactivity;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

String tag = "Lifecycle";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(tag, "Ini adalah onCreate() event");
}

public void onStart()
{
super.onStart();
Log.d(tag, "Ini adalah onStart() event");
}

public void onRestart()
{
super.onRestart();
Log.d(tag, "Ini adalah onRestart() event");
}

public void onResume()
{
super.onResume();
Log.d(tag, "ini adalah onResume() event");
}

public void onPause()
{
super.onPause();
Log.d(tag, "Ini adalah onPause() event");
}

public void onStop()
{
super.onStop();
Log.d(tag, "Ini adalah onStop() event");
}

public void onDestroy()
{
super.onDestroy();
Log.d(tag, "Ini adalah onDestroy() event");
}
}
3. Jalankan emulator di Android Studio.

4. Ketika 'activity' pertama kali muncul, kita seharusnya bisa melihat di jendela Log seperti berikut ini:
D/Lifecycle: Ini adalah onCreate() event
D/Lifecycle: Ini adalah onStart() event
D/Lifecycle: ini adalah onResume() event
5. Bila kita klik tombol 'Back' di emulator, kita akan melihat seperti berikut:
D/Lifecycle: Ini adalah onPause() event
D/Lifecycle: Ini adalah onStop() event
D/Lifecycle: Ini adalah onDestroy() event
6. Klik tombol 'Home' dan tahan. Kemudian klik ikon 'activity' tersebut kita akan lihat seperti berikut:
D/Lifecycle: Ini adalah onCreate() event
D/Lifecycle: Ini adalah onStart() event
D/Lifecycle: ini adalah onResume() event
7. Klik tombol 'phone' sehingga 'activity' dipaksa untuk ke background. Kita akan lihat seperti berikut:
D/Lifecycle: Ini adalah onPause() event
D/Lifecycle: Ini adalah onStop() event
8. Perhatikan, bahwa event 'onDestroy()' tidak dipanggil, yang artinya bahwa 'activity' masih ada di memory. Coba keluar dari 'phone' dengan klik tombol 'Back'. 'Activity' sekarang muncul lagi dan kita lihat di Log seperti berikut:
D/Lifecycle: Ini adalah onRestart() event
D/Lifecycle: Ini adalah onStart() event
D/Lifecycle: ini adalah onResume() event
Event 'onRestart()' sekarang dipanggil dan kemudian diikuti oleh 'onStart()' dan 'onResume()'.


Penjelasan:

Seperti yang sudah kita lihat dengan contoh sederhana di atas, suatu 'activity' di-destroy bila kita klik tombol 'Back'. Ini sangatlah penting untuk diketahui, karena apapun status 'activity' saat ini akan menjadi hilang; karena itu, kita perlu menulis kode tambahan dalam 'activity' kita untuk menjaga status-statusnya bila 'activity' tersebut di-destroy. Nanti bisa dilihat dalam latihan yang lain. Hingga saat ini, harap diingat bahwa method 'onPause()' dipanggil dengan dua cara, yaitu ketika 'activity' dipaksa ke background, dan ketika di-kill bila user menekan tombol 'Back'.

Ketika suatu 'activity' dimulai, method 'onStart()' dan 'onResume()' selalu dipanggil otomatis, tidak peduli apakah 'activity' di-load ulang dari background atau benar-benar baru di-load dari awal. Bila suatu 'activity' dibuat saat pertama kali, method 'onCreate()' dipanggil.

Dari contoh di atas kita bisa membuat semacam pedoman seperti berikut:
  • Kita gunakan method 'onCreate()' untuk membuat dan meng-instansiasi object-object yang akan digunakan pada app kita.
  • Kita gunakan method 'onResume()' untuk memulai service atau kode apapun yang perlu dijalankan ketika 'activity' kita ada di depan.
  • Kita gunakan method 'onDestroy()' untuk melepaskan resources sebelum 'activity' di-destroy.
Catatan:
Meskipun suatu app hanya memiliki satu 'activity' dan 'activity' tersebut di-kill, app akan masih tetap aktif di memory.

No comments: