onCreate()
Metode Anda memiliki beberapa kekurangan besar:
1) onCreate
mempersiapkan Aktivitas Anda - jadi apa pun yang Anda lakukan di sini tidak akan terlihat oleh pengguna sampai metode ini selesai! Misalnya - Anda tidak akan pernah bisa mengubah TextView
teks a di sini lebih dari SATU kali karena hanya perubahan terakhir yang akan dibuat dan terlihat oleh pengguna!
2) Perlu diingat bahwa program Android akan - secara default - hanya berjalan dalam SATU utas! Jadi: jangan pernah menggunakan Thread.sleep()
atau Thread.wait()
di utas utama Anda yang bertanggung jawab atas UI Anda! (baca "Menjaga Aplikasi Anda Tetap Responsif" untuk informasi lebih lanjut!)
Apa yang dilakukan inisialisasi Aktivitas Anda adalah:
- tanpa alasan Anda membuat
TextView
objek baru t
!
- Anda memilih tata letak Anda
TextView
di variabel t
nanti.
- Anda menyetel teks
t
(namun perlu diingat: teks hanya akan ditampilkan setelah onCreate()
selesai dan loop peristiwa utama aplikasi Anda berjalan!)
- Anda menunggu selama 10 detik dalam
onCreate
metode Anda - ini tidak boleh dilakukan karena menghentikan semua aktivitas UI dan pasti akan memaksa ANR (Aplikasi Tidak Merespons, lihat tautan di atas!)
- lalu Anda menyetel teks lain - teks ini akan ditampilkan segera setelah
onCreate()
metode Anda selesai dan beberapa metode siklus hidup Aktivitas lainnya telah diproses!
Solusinya:
Setel teks hanya sekali onCreate()
- ini harus menjadi teks pertama yang harus terlihat.
Buat Runnable
dan aHandler
private final Runnable mUpdateUITimerTask = new Runnable() {
public void run() {
t.setText("Second text to display!");
}
};
private final Handler mHandler = new Handler();
instal runnable ini sebagai handler, mungkin di onCreate()
(tapi baca saran saya di bawah):
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
Saran: pastikan Anda mengetahui Activity
siklus hidup! Jika Anda melakukan hal-hal seperti itu, onCreate()
ini hanya akan terjadi saat Anda Activity
dibuat pertama kali! Android mungkin akan membuat Anda tetap Activity
hidup untuk jangka waktu yang lebih lama, meskipun tidak terlihat! Saat pengguna "memulai" lagi - dan teks tersebut masih ada - Anda tidak akan melihat teks pertama Anda lagi!
=> Selalu instal penangan onResume()
dan nonaktifkan mereka onPause()
! Jika tidak, Anda akan mendapatkan "pembaruan" saat Anda Activity
tidak terlihat sama sekali! Dalam kasus Anda, jika Anda ingin melihat teks pertama Anda lagi ketika diaktifkan kembali, Anda harus mengaturnya onResume()
, bukan onCreate()
!
.setText()
mengganti seluruh "widget" dengan teks yang Anda perintahkan untuk disetel; TERMASUK teks yang sudah Anda taruh di sana.