What's onCreate (Bundle storedInstanceState)

122

Siapa pun dapat membantu saya untuk tahu tentang Bundle savedInstanceStatedi onCreate(Bundle savedInstanceState)Saya newbie di Android. Saya mencoba memahaminya dari developer.android.com. Tapi saya tidak bisa mengerti. Adakah yang bisa menyederhanakannya?

pengguna1077015
sumber
2
Ini adalah video yang bagus: youtube.com/watch?v=kkYIMZw9gzQ
Francisco Corrales Morales

Jawaban:

106

Jika Anda menyimpan status aplikasi dalam sebuah bundel (biasanya non-persisten, data dinamis dalam onSaveInstanceState), itu bisa diteruskan kembali ke onCreatejika aktivitas perlu dibuat ulang (misalnya, perubahan orientasi) sehingga Anda tidak kehilangan ini sebelumnya informasi. Jika tidak ada data yang diberikan, savedInstanceStatebernilai null.

... Anda harus menggunakan metode onPause () untuk menulis data persisten (seperti hasil edit pengguna) ke penyimpanan. Selain itu, metode onSaveInstanceState (Bundle) dipanggil sebelum menempatkan aktivitas dalam keadaan latar belakang seperti itu, memungkinkan Anda menyimpan keadaan instance dinamis apa pun dalam aktivitas Anda ke dalam Bundle yang diberikan, untuk kemudian diterima di onCreate (Bundle) jika aktivitas perlu dibuat ulang. Lihat bagian Siklus Hidup Proses untuk informasi selengkapnya tentang bagaimana siklus hidup suatu proses terkait dengan aktivitas yang dihostingnya. Perhatikan bahwa penting untuk menyimpan data persisten di onPause () daripada onSaveInstanceState (Bundle) karena yang terakhir bukan bagian dari callback siklus proses, jadi tidak akan dipanggil dalam setiap situasi seperti yang dijelaskan dalam dokumentasinya.

sumber

Dhruv Gairola
sumber
2
apakah aktivitas lain berbagi Bundel yang sama?, jika saya memulai aktivitas lain, apakah Bundel tersebut lolos dari yang pertama?
Francisco Corrales Morales
17

onCreate(Bundle savedInstanceState)Anda akan mendapatkan Bundlenull saat aktivitas dimulai pertama kali dan akan digunakan saat orientasi aktivitas diubah .......

http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html

Android menyediakan cara elegan lain untuk mencapai ini. Untuk mencapai ini, kita harus mengganti metode yang dipanggil onSaveInstanceState(). Platform Android memungkinkan pengguna untuk menyimpan status instance apa pun. Status instance dapat disimpan di Bundle. Bundel diteruskan sebagai argumen ke metode onSaveInstanceState.

kita dapat memuat status instance yang disimpan dari Bundle yang diteruskan sebagai argumen ke onCreatemetode. Kita juga dapat memuat status instance yang disimpan dalam onRestoreInstanceStatemetode. Tapi saya akan meninggalkan itu untuk para pembaca untuk mengetahuinya.

Dheeresh Singh
sumber
11
savedInstanceStateakan menjadi non- nulljika onSavedInstanceState()sebelumnya dipanggil. perubahan orientasi hanyalah satu contoh di mana hal ini mungkin terjadi.
Alex Lockwood
1
@AlexLockwood, Saya mencoba memikirkan semua situasi di mana hal ini mungkin terjadi. Apakah ada dokumentasi? Satu contoh yang dapat saya pikirkan adalah jika pengguna beralih aplikasi dan kembali, tetapi aktivitas tersebut telah dihancurkan untuk memulihkan sumber daya. Dalam hal ini android akan membuat ulang aktivitas dengan bundel jika onSaveInsanceState () diganti, bukan?
batbrat
1
@ batbrat Ya ... komentar yang saya buat (hampir dua tahun yang lalu) tidak sepenuhnya benar. Saya kira cara terbaik untuk meletakkannya adalah Bundleargumen ke onCreate(Bundle)akan menjadi non- nulljika dan hanya jika metode Activityhad itu onSaveInstanceStatedipanggil sebelumnya. Ini terjadi selama perubahan orientasi ... dan juga terjadi saat aktivitas kembali setelah dimatikan oleh OS, dan saat Anda memicu perubahan konfigurasi lain yang diinginkan pada perangkat Anda.
Alex Lockwood
Terima kasih atas klarifikasi Alex. Ada baiknya memiliki kejelasan tentang subjek. Saya lupa tentang perubahan konfigurasi selain sakelar orientasi pada khususnya.
batbrat
15

Seperti yang dijawab Dhruv Gairola, Anda dapat menyimpan status aplikasi dengan menggunakan Bundle storedInstanceState. Saya mencoba memberikan contoh yang sangat sederhana yang dapat dipahami oleh pelajar baru seperti saya dengan mudah.

Misalkan, Anda memiliki fragmen sederhana dengan TextView dan Button. Setiap kali Anda mengklik tombol, teks berubah. Sekarang, ubah orientasi perangkat / emulator Anda dan perhatikan bahwa Anda kehilangan data (artinya data yang diubah setelah Anda mengklik yang didapat) dan fragmen dimulai seperti yang pertama kali lagi. Dengan menggunakan Bundle storedInstanceState kita bisa menyingkirkan ini. Jika Anda melihat siklus hidup fragmen. Fragment Lifecylce Anda akan mendapatkan bahwa metode "onSaveInstanceState" dipanggil saat fragmen akan dimusnahkan.

Jadi, kita bisa menyimpan keadaan berarti nilai teks yang diubah ke dalam bundel itu seperti ini

 int counter  = 0;
 @Override
 public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("value",counter);
 }

Setelah Anda membuat orientasi, metode "onCreate" akan dipanggil bukan? jadi kita bisa melakukan ini

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(savedInstanceState == null){
        //it is the first time the fragment is being called
        counter = 0;
    }else{
        //not the first time so we will check SavedInstanceState bundle
        counter = savedInstanceState.getInt("value",0); //here zero is the default value
    }
}

Sekarang, Anda tidak akan kehilangan nilai Anda setelah orientasi. Nilai yang diubah akan selalu ditampilkan.

Asad
sumber
Perhatikan bahwa ini juga berlaku untuk Aktivitas. Bisakah Anda menjelaskan lebih lanjut tentang perbedaan (Bundle of Activity) dan Bundle of Fragment?
laalaguer
Anda bisa mendapatkan pemahaman yang jelas dari siklus hidup aktivitas dan fragmen di mana aktivitas bisa menampilkan beberapa fragmen dalam satu waktu. Jadi, perbedaan dasarnya adalah Anda mungkin ingin menyimpan beberapa nilai untuk semua fragmen aktivitas, maka Anda akan melakukannya. gunakan bundel aktivitas jika tidak, Anda harus menggunakan bundel fragmen jika itu untuk fragmen tertentu.
Asad
5

Fungsi onCreate (Bundle storedInstanceState) di Android:

1) Saat aktivitas pertama kali memanggil atau diluncurkan, metode onCreate (Bundle storedInstanceState) bertanggung jawab untuk membuat aktivitas.

2) Kapan pun orientasi (yaitu dari horizontal ke vertikal atau vertikal ke horizontal) aktivitas berubah atau ketika Aktivitas dihentikan secara paksa oleh Sistem Operasi apa pun, maka saveInstanceState yaitu objek Bundle Class akan menyimpan status Aktivitas.

3) Setelah Orientasi diubah, onCreate (Bundle storedInstanceState) akan memanggil dan membuat ulang aktivitas dan memuat semua data dari storedInstanceState.

4) Pada dasarnya kelas Bundle digunakan untuk menyimpan data aktivitas setiap kali kondisi di atas terjadi dalam aplikasi.

5) onCreate () tidak diperlukan untuk aplikasi. Tapi alasannya digunakan dalam aplikasi adalah karena metode itu adalah tempat terbaik untuk meletakkan kode inisialisasi.

6) Anda juga bisa meletakkan kode inisialisasi Anda di onStart () atau onResume () dan ketika aplikasi Anda memuat pertama, itu akan bekerja sama seperti di onCreate ().

Abhi
sumber
4

onCreate(Bundle)dipanggil saat aktivitas pertama kali dimulai. Anda dapat menggunakannya untuk melakukan inisialisasi satu kali seperti membuat antarmuka pengguna. onCreate()mengambil satu parameter yang merupakan null atau beberapa informasi negara yang sebelumnya disimpan oleh onSaveInstanceState.

psxls
sumber
0

onCreate (Bundle storedInstanceState) dipanggil dan disimpanInstanceState tidak akan null jika Aktivitas Anda dan diakhiri dalam skenario (tampilan visual) yang dijelaskan di atas. Aplikasi Anda kemudian dapat mengambil (menangkap) data dari storedInstanceState dan membuat ulang Aktivitas Anda

kabilan
sumber