Saya memahami bahwa Android Activities
memiliki siklus hidup tertentu dan itu onCreate
harus diganti dan digunakan untuk inisialisasi, tetapi apa yang sebenarnya terjadi di konstruktor? Adakah kasus ketika Anda bisa / harus mengganti Activity
konstruktor juga, atau haruskah Anda tidak pernah menyentuhnya?
Saya berasumsi bahwa konstruktor tidak boleh digunakan karena referensi ke Activities
tidak dibersihkan seluruhnya (sehingga menghambat pengumpul sampah) dan itu onDestroy
ada untuk tujuan itu. Apakah ini benar?
java
android
garbage-collection
android-activity
oncreate
mendewakan
sumber
sumber
Jawaban:
Saya tidak bisa memikirkan alasan bagus untuk melakukan apa pun di konstruktor. Anda tidak pernah membuat aktivitas secara langsung, jadi Anda tidak dapat menggunakannya untuk meneruskan parameter. Umumnya, lakukan saja di onCreate.
sumber
Alasan yang baik untuk meletakkan benda-benda di konstruktor seperti yang dinyatakan oleh komentar Gili adalah penggunaan bidang akhir.
Namun, jika Anda menginisialisasi sesuatu di konstruktor, maka umur objek akan sedikit lebih lama, meskipun saya tidak terlalu memikirkannya karena
onCreate
akan segera dipanggil setelahnya.Meskipun bertentangan dengan cita-cita saya, saya menghindari konstruktor untuk inisialisasi anggota aktivitas dan mengandalkan
onResume()
sertaonPause()
untuk sumber daya yang ditangani aplikasi saya.Karena
onCreate()
saya biasanya menggunakannya untuk melakukan pemetaan tampilan ke variabel lokal. Meskipun android-annotations sudah melakukan itu untuk saya, jadi saya jarang memilikionCreate()
metode untuk Aktivitas saya. Saya masih menggunakannya di Layanan sekalipun.Namun, jika Anda melihat anggota yang mungkin Anda inisialisasi
mereka akan memiliki metode "tutup" yang harus Anda panggil pada waktu yang tepat (onResume atau onPause)
mereka akan menjadi bagian dari tampilan yang berarti itu perlu diinisialisasi kemudian onCreate perlu dipanggil
mereka adalah konstanta yang tidak perlu diletakkan di konstruktor, hanya final statis sudah cukup. Ini termasuk konstanta Paint dan Path yang dapat diinisialisasi dengan blok statis
sumber
Saya sekarang dalam kasus yang perlu menimpa konstruktor. Sebenarnya, saya memiliki beberapa aktivitas yang memiliki struktur yang sama. Jadi, alih-alih membuat banyak aktivitas, saya akan membuat satu aktivitas "Master" dan yang lainnya akan mewarisi aktivitas ini. Jadi saya perlu mengganti konstruktor aktivitas anak untuk dapat menginisialisasi beberapa variabel yang akan digunakan dalam metode oncreate.
Dalam dua kata, konstruktor membuat Anda mensimulasikan "aktivitas utama" yang dapat digunakan kembali oleh pewarisan!
sumber
Anda perlu mengganti Pembuat ketika aktivitas Anda akan memiliki parameter khusus atau Anda ingin melacak panggilan dari kelas yang diwarisi darinya.
sumber
startActivityForResult
saya harus menyertakan konstruktor privat di komponen kustom saya, meskipun aktivitas itu tidak akan pernah diluncurkan dan tidak memiliki elemen visibile, saya hanya menggunakan for result stuff darinya.