Android: Pengenalan Daur Hidup Activity dan SharedPreference

Aplikasi yang kita buat bisa memiliki satu activity, atau juga banyak activity. Setiap activity yang didefinisikan memiliki daur hidup tersendiri. jika saat ini activity sedang running, mungkin selanjutnya aplikasi kita berhenti sebentar (pause) atau memang benar-benar dimusnahkan, hilang dari memori (destroy). Ya, state-nya memang bisa berubah-ubah. Dan semuanya diatur oleh sistem. Tapi kita sebagai developer bisa melakukan pengaturan tindakan saat activity berada di state tertentu dengan cara melakukan override terhadap method di dalam class Activity. Pada waktunya, Android akan memanggil method yang bersesuaian dengan state activity.

Berikut adalah diagramnya.

Gambar 1. Daur Hidup Activity

Berikut ini adalah deskripsi dari method override dari class Activity untuk daur hidup activity.

  1. onCreate()
    method ini dipanggil saat activity pertama kali dibuat. Di sinilah inisialisasi dilakukan – membuat UI, mendapatkan data yang diperlukan, dan lainnya.
  2. onStart()
    method ini dipanggil sesaat sebelum activity ditampilkan ke pengguna.
  3. onResume()
    method ini dipanggil ketika activity berinteraksi dengan pengguna.
  4. onPause()
    method ini berjalan ketika activity berada di balik layar (background), tidak terlihat oleh pengguna tapi masih berjalan. Biasanya hal ini terjadi saat ada activity lainnya yang dijalankan. Di state inilah seharusnya data program kita disimpan ke persistent state.
  5. onStop()
    method ini berjalan ketika activity sudah tidak terlihat lagi oleh pengguna dalam waktu yang cukup lama dan activity tidak diperlukan untuk sementara waktu.
  6. onRestart()
    jika method ini dipanggil, berarti activity sedang ditampilkan ulang ke pengguna dari state berhenti (stop).
  7. onDestroy()
    method ini dipanggil sebelum activity dimusnahkan (hilang dari memori).

Persistent State Demo

Setelah mengetahui daur hidup activity dalam aplikasi Android, saatnya kita buat aplikasi yang membantu kita memahami teori-teori di atas. Kita akan membuat aplikasi Android yang bisa menyimpan teks yang dituliskan pengguna. Jika pengguna keluar dari aplikasi, kemudian masuk kembali ke aplikasi, teks yang dituliskan sesaat sebelum keluar dari aplikasi akan ada, tidak hilang.๐Ÿ˜€

Langkah pertama, buatlah project Android. Silakan diisi dengan detail project sebagai berikut. Struktur project yang terbentuk sebagai berikut.

Project name: PersistentStateDemo
Application name: PersistentStateDemo
Package name: cs.mobile.apps
Create Activity: PersistentStateDemo
Build Target: Android 2.2

Pertama kali, kita definisikan resource yang akan dipakai. Bukalah file strings.xml. Penggunaan resource ini akan membuat aplikasi yang dibuat menjadi lebih rapi. Nama dalam string resource ini digunakan sebagai pengenal agar bisa diacu oleh file xml.

<?xmlversion="1.0"encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, PersistentStateDemo!</string>
    <string name="app_name">PersistentStateDemo</string>
    <string name="pesan">Ini adalah demonstrasi persistent state ^^</string>
    <string name="simpan_state">Text field di bawah ini menyimpan
    state-nya:</string>
    <string name="tidak_simpan_state">Text field di bawah ini
    menyimpan state-nya:</string>
    <string name="teks_awal">everyday is a new day...:D</string>
</resources>

Buka file main.xml. Ubah isinya menjadi berikut ini.

<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="4dip"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

    <TextView android:id="@+id/msg"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="15dip"
        android:text="@string/pesan"
        />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="4dip"
        android:text="@string/simpan_state"
        />

    <EditText android:id="@+id/saved"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#c4d6d900"
        android:paddingBottom="12dip"
        android:text="@string/teks_awal">
        </EditText>

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="8dip"
        android:paddingBottom="4dip"
        android:text="@string/tidak_simpan_state"
        />

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#99ff0000"
        android:paddingBottom="12dip"
        android:text="@string/teks_awal">
        </EditText>

</LinearLayout>

Bisa kita lihat, tampilan yang kita buat akan memiliki tampilan text (TextView) dan text field (EditText). Teks yang kita gunakan kita ambil dari file strings.xml. Lihatlah bagaimana pengambilan teks dari strings.xml.

Edit source code pada PersistentStateDemo.java menjadi sebagai berikut.

package cs.mobile.apps;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;

public class PersistentStateDemo extends Activity {
    private EditText tfSaved;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tfSaved = (EditText)findViewById(R.id.saved);
    }
}

Jika sudah, tekan tombol Run pada toolbar atau pilih Run > Run pada menubar. Karena aplikasi baru pertama kali dibuat, akan muncul pilihan berikut. Pilih ‘Android Application’.

Gambar 2. Pemilihan Eksekusi Aplikasi

Tunggu sampai Android emulator bisa digunakan. Tampilan aplikasi “PersistentStateDemo” yang kita buat akan muncul sebagai berikut.

Gambar 3. Tampilan Awal Aplikasi

Sekarang kita buat isi kedua text field di layar dengan teks yang diinginkan. Misalnya, kita ubah menjadi berikut.

Gambar 4. Pengubahan Teks pada Text Field

Jika sudah diubah, kita keluar dari aplikasi dengan menekan tombol Back. Kemudian kita masuk lagi ke aplikasi. Hasilnya, teks kembali ke asal (lihat gambar 3), hasil pengaturan awal dari file main.xml.

Mari kita ubah file PersistentStateDemo.java agar sesuai dengan tujuan awal pembuatan aplikasi. Tambahkan method override onResume() dan onPause().

package cs.mobile.apps;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;

public class PersistentStateDemo extends Activity {
    private EditText tfSaved;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tfSaved = (EditText)findViewById(R.id.saved);
    }

    @Override
    protected void onResume() {
        super.onResume();
        SharedPreferences prefs = getPreferences(0);
        String restoredText = prefs.getString("text", null);
        if (restoredText != null) {
            tfSaved.setText(restoredText, TextView.BufferType.EDITABLE);

            int selectionStart = prefs.getInt("selection-start", -1);
            int selectionEnd = prefs.getInt("selection-end", -1);
            if (selectionStart != -1 && selectionEnd != -1) {
                tfSaved.setSelection(selectionStart, selectionEnd);
            }
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        SharedPreferences.Editor editor = getPreferences(0).edit();
        editor.putString("text", tfSaved.getText().toString());
        editor.putInt("selection-start", tfSaved.getSelectionStart());
        editor.putInt("selection-end", tfSaved.getSelectionEnd());
        editor.commit();
    }
}

Sekarang mari kita ubah isi dari kedua text field di layar seperti pada contoh sebelumnya, lalu keluar dari aplikasi, kemudian masuk kembali ke dalam aplikasi. Hasilnya, teks dalam text field berwarna kuning sama seperti sesaat sebelum kita keluar dari aplikasi.๐Ÿ˜€

Gambar 5. Teks pada Text Field Berwarna Kuning Menyimpan State Terakhirnya

Bagaimana kode ini bekerja?

Ketika pertama kali aplikasi dijalankan (dengan kata lain, activity dibuat), method onCreate() dieksekusi. Di dalam method ini, terdapat pengaturan tampilan layar dan pengambilan ID dari text field berwarna kuning. Dalam Android, tampilan text field direpresentasikan oleh class EditText. Setelah method onCreate() dieksekusi, selanjutnya Android mengeksekusi method onResume(). Karena activity baru diluncurkan pertama kalinya, belum ada nilai yang tersimpan di SharedPreference sehingga variabel restoredText bernilai null.

Ketika kita keluar dari aplikasi, method onPause() akan dieksekusi. Inilah saat yang pas untuk menyimpan state dari text field atau menyimpan konten dari text field. Jika kita lihat kode di dalam method onPause(), kita akan melihat proses penyimpanan konten text field berwarna kuning. Saat kita masuk kembali ke aplikasi, method onCreate() dan onResume() dieksekusi kembali. Tapi saat ini, sudah ada teks yang tersimpan di SharedPreference. Teks inilah yang selanjutnya ditampilkan ke text field kuning.

Inilah sedikit teori-teori dasar dari aplikasi Android. Menarik untuk menjelajah lebih jauh, kan?๐Ÿ˜€

Referensi

  • Burnette, Ed. 2010. Hello, Android: Intoducing Google’s Mobile Development Platform 3rd Edition. Texas, USA: The Pragmatic Bookshelf.
  • Google. 2011. Application Fundamentals. Accessed on April, 3 2011. <http://developer.android.com/&gt;
  • Google. 2011. What is Android? Accessed on April, 3 2011. <http://developer.android.com/&gt;

3 thoughts on “Android: Pengenalan Daur Hidup Activity dan SharedPreference

    • Dalam text field kan biasanya ada kursor kan dan bisa diisi teks. Nah, misalnya teksnya kita select/blok/pilih, maka akan terlihat posisi awal dari select hingga akhir dari select.

      method getSelectionStart() akan mendapatkan posisi awal jika teks di-select. begitu juga method getSelectionEnd() untuk mendapatkan posisi akhir dari select.

      Dari tutorial di atas, misal kita select deh teks yang dalam text field, keluar dari aplikasi, lalu masuk lagi. Dan silakan lihat hasilnya.

      Moga membantu.๐Ÿ˜€

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s