Saya sedang mengerjakan aplikasi Android yang cukup kompleks yang membutuhkan sejumlah besar data tentang aplikasi (saya akan mengatakan total sekitar 500KB - apakah ini besar untuk perangkat seluler?). Dari apa yang saya dapat katakan, setiap perubahan orientasi dalam aplikasi (dalam aktivitas, lebih tepatnya) menyebabkan kehancuran total dan rekreasi aktivitas. Berdasarkan temuan saya, kelas Aplikasi tidak memiliki siklus hidup yang sama (yaitu, untuk semua maksud dan tujuan, selalu dipakai). Apakah masuk akal untuk menyimpan informasi status di dalam kelas aplikasi dan kemudian mereferensikannya dari Aktivitas, atau apakah itu secara umum bukan metode yang "dapat diterima" karena batasan memori pada perangkat seluler? Saya sangat menghargai saran apa pun tentang topik ini. Terima kasih!
112
Jawaban:
Saya tidak berpikir 500kb akan menjadi masalah besar.
Apa yang Anda jelaskan persis bagaimana saya menangani masalah kehilangan data dalam suatu aktivitas. Saya membuat singleton global di kelas Aplikasi dan dapat mengaksesnya dari aktivitas yang saya gunakan.
Anda dapat menyebarkan data di dalam Global Singleton jika itu akan sering digunakan.
Kemudian panggil dalam aktivitas apa pun dengan:
Saya membahasnya di sini di posting blog saya , di bawah bagian "Global Singleton."
sumber
Mereka yang mengandalkan
Application
contoh salah. Pada awalnya, ini mungkin tampak seolah-olahApplication
ada selama seluruh proses aplikasi ada, tetapi ini adalah asumsi yang salah.OS dapat menghentikan proses jika diperlukan. Semua proses dibagi menjadi 5 tingkat "killability" yang ditentukan dalam dokumen .
Jadi, misalnya, jika aplikasi Anda berjalan di latar belakang karena pengguna menjawab panggilan masuk, maka bergantung pada status RAM, OS mungkin (atau mungkin tidak) menghentikan proses Anda (menghancurkan
Application
instance dalam proses) .Saya pikir pendekatan yang lebih baik adalah mempertahankan data Anda ke file penyimpanan internal dan kemudian membacanya ketika aktivitas Anda dilanjutkan.
MEMPERBARUI:
Saya mendapat banyak tanggapan negatif, jadi sekarang saatnya menambahkan klarifikasi. :) Yah, awalnya saya benar-benar menggunakan asumsi yang salah bahwa status sangat penting untuk aplikasi. Namun jika aplikasi Anda baik-baik saja dan terkadang statusnya hilang (bisa jadi beberapa gambar yang baru saja dibaca ulang / diunduh ulang), maka Anda dapat menyimpannya sebagai anggota
Application
.sumber
Application
instance, namun tidak akan ada data statis yang Anda andalkan kecuali Anda mempertahankannya.Jika Anda ingin mengakses "Global Singleton" di luar suatu aktivitas dan Anda tidak ingin melewati
Context
semua objek yang terlibat untuk mendapatkan singleton, Anda bisa menentukan atribut statis di kelas aplikasi Anda, yang menyimpan referensi ke diri. Inisialisasi saja atribut dalamonCreate()
metode.Sebagai contoh:
Karena subkelas dari
Application
juga bisa mendapatkan Sumber Daya, Anda bisa mengaksesnya hanya saat Anda mendefinisikan metode statis, yang mengembalikannya, seperti:Namun berhati-hatilah saat membagikan referensi Konteks untuk menghindari kebocoran memori .
sumber
Application
untuk melakukan ini. Anda dapat mendeklarasikan variabel anggota statis di kelas mana pun untuk melakukan ini.Dave, jenis data apa itu? Jika itu adalah data umum yang berkaitan dengan aplikasi secara keseluruhan (contoh: data pengguna), maka perluas kelas Aplikasi dan simpan di sana. Jika data berkaitan dengan Aktivitas, Anda harus menggunakan penangan onSaveInstanceState dan onRestoreInstanceState untuk mempertahankan data pada rotasi layar.
sumber
Anda sebenarnya dapat mengganti fungsionalitas orientasi untuk memastikan bahwa aktivitas Anda tidak dimusnahkan dan dibuat ulang. Lihat di sini .
sumber
Anda dapat membuat kelas Aplikasi dan menyimpan semua data Anda di panggilan itu untuk digunakan di mana saja dalam aplikasi Anda.
sumber
Saya tahu ini adalah pertanyaan yang sangat lama tetapi menggunakan ViewModel dari komponen jetpack adalah cara terbaik untuk menjaga data antara rotasi Aktivitas.
sumber