Saya telah membuat Proyek Aplikasi Android dan di MainActivity.java> onCreate()
itu memanggil super.onCreate(savedInstanceState)
.
Sebagai pemula, adakah yang bisa menjelaskan apa tujuan baris di atas?
Jawaban:
Setiap Aktivitas yang Anda lakukan dimulai melalui urutan panggilan metode. onCreate()
adalah yang pertama dari panggilan ini.
Masing-masing dan setiap Aktivitas Anda meluas android.app.Activity
baik secara langsung atau dengan mensubkelas subkelas lain dari Activity
.
Di Java, saat Anda mewarisi dari kelas, Anda bisa mengganti metodenya untuk menjalankan kode Anda sendiri di dalamnya. Contoh yang sangat umum dari ini adalah penggantian toString()
metode saat memperluas java.lang.Object
.
Saat kita mengganti metode, kita memiliki opsi untuk mengganti sepenuhnya metode di kelas kita, atau memperluas metode kelas induk yang ada. Dengan memanggil super.onCreate(savedInstanceState);
, Anda memberi tahu VM Dalvik untuk menjalankan kode Anda selain kode yang ada di onCreate () kelas induk. Jika Anda meninggalkan baris ini, maka hanya kode Anda yang dijalankan. Kode yang ada diabaikan sepenuhnya.
Namun, Anda harus menyertakan panggilan super ini dalam metode Anda, karena jika tidak maka onCreate()
kode dalam Activity
tidak pernah berjalan, dan aplikasi Anda akan mengalami semua jenis masalah seperti tidak memiliki Konteks yang ditetapkan ke Aktivitas (meskipun Anda akan menekan a SuperNotCalledException
sebelum Anda memiliki kesempatan untuk mengetahui bahwa Anda tidak memiliki konteks).
Singkatnya, kelas Android sendiri bisa sangat kompleks. Kode dalam kelas framework menangani hal-hal seperti menggambar UI, membersihkan rumah, serta memelihara Aktivitas dan siklus hidup aplikasi. super
panggilan memungkinkan pengembang untuk menjalankan kode kompleks ini di belakang layar, sambil tetap memberikan tingkat abstraksi yang baik untuk aplikasi kita sendiri.
* onCreate(bundle)
Metode kelas yang diturunkan harus memanggil implementasi superclass dari metode ini. Ini akan memunculkan pengecualian SuperNotCalledException jika kata kunci " super " tidak digunakan.
Untuk pewarisan dalam Java
, untuk mengganti metode superclass dan juga untuk mengeksekusi metode kelas di atas, gunakan super.methodname()
metode kelas turunan yang menimpa;
Kelas Android bekerja dengan cara yang sama. Dengan memperluas Activity
kelas yang memiliki onCreate(Bundle bundle)
metode di mana kode bermakna ditulis dan untuk mengeksekusi kode itu dalam aktivitas yang ditentukan, gunakan kata kunci super dengan metode onCreate () seperti super.onCreate(bundle)
.
Ini adalah kode yang ditulis dalam onCreate()
metode kelas Aktivitas dan tim Android Dev mungkin menambahkan beberapa kode yang lebih bermakna ke metode ini nanti. Jadi, untuk mencerminkan penambahan, Anda harus memanggil super.onCreate () di Activity
kelas Anda .
protected void onCreate(Bundle savedInstanceState) {
mVisibleFromClient = mWindow.getWindowStyle().getBoolean(
com.android.internal.R.styleable.Window_windowNoDisplay, true);
mCalled = true;
}
boolean mVisibleFromClient = true;
/**
* Controls whether this activity main window is visible. This is intended
* only for the special case of an activity that is not going to show a
* UI itself, but can't just finish prior to onResume() because it needs
* to wait for a service binding or such. Setting this to false prevents the UI from being shown during that time.
*
* <p>The default value for this is taken from the
* {@link android.R.attr#windowNoDisplay} attribute of the activity's theme.
*/
Itu juga mempertahankan variabel mCalled
yang berarti Anda telah memanggil super.onCreate(savedBundleInstance)
dalam Aktivitas Anda.
final void performStart() {
mCalled = false;
mInstrumentation.callActivityOnStart(this);
if (!mCalled) {
throw new SuperNotCalledException(
"Activity " + mComponent.toShortString() +
" did not call through to super.onStart()");
}
}
Lihat kode sumber di sini.
Karena pada super.onCreate () itu akan mencapai kelas Activity (kelas induk dari aktivitas apa pun) untuk memuat disimpanInstanceState, dan kita biasanya tidak menyetel status instance tersimpan apa pun, tetapi framework android membuatnya sedemikian rupa sehingga, kita harus memanggil bahwa.
super.onCreate(savedInstanceState)
, kecuali Anda memiliki kesalahan lain di dalamnya
Ini adalah informasi yang ingin Anda kembalikan ke aplikasi Anda, melalui onCreate (), jika aktivitas dimusnahkan dan dimulai ulang karena beberapa alasan implisit (misalnya, bukan karena pengguna menekan tombol kembali). Penggunaan onSaveInstanceState () yang paling umum adalah untuk menangani rotasi layar, karena secara default, aktivitas dimusnahkan dan dibuat ulang saat pengguna menggeser keyboard G1.
Alasan untuk memanggil super.onCreate (storedInstanceState) adalah karena kode Anda tidak akan dikompilasi sebaliknya. ;-)