Pendahuluan
Dengan pengembangan Android, kami menggunakan berbagai solusi (pola) arsitektur. Sebagai contoh, Mvp , Mvvm , Mvi , dll ... Masing-masing pola ini memecahkan beberapa masalah penting, dan karena mereka tidak sempurna, mereka meninggalkan kita beberapa masalah yang belum terpecahkan. Sebagai contoh, tugas-tugas ini termasuk menavigasi dalam aplikasi (perutean), mentransfer informasi dari layar ke layar (berbicara layar, maksud saya Kegiatan, Fragmen atau Melihat), Menyimpan keadaan aplikasi ketika mengubah konfigurasi (perubahan konfigurasi).
Di perusahaan kami, kami juga menghadapi masalah ini, beberapa diselesaikan dengan cara yang mudah, tetapi yang pertama tidak menemukan solusi spesifik, setelah mencoba berbagai metode untuk menyelesaikannya, kami menulis perpustakaan Flowzard kami sendiri.
Tantangan
Di perusahaan kami, kami menggunakan arsitektur Mvp . Agar memiliki fleksibilitas maksimum saat menampilkan, mengubah, dan mentransfer data antar layar, kami mencoba mengikuti prinsip yang disebut Prinsip tanggung jawab tunggal . Prinsipnya menyatakan bahwa setiap modul harus menyelesaikan masalah tertentu. Dalam kasus kami, layar harus diisolasi dari tugas global dan harus menyelesaikan tugas spesifiknya untuk menunjukkan / menerima informasi. Dia seharusnya tidak tahu tentang layar lain sama sekali. Sehingga kami dapat mencapai fleksibilitas maksimal. Di bawah ini adalah contoh pengaturan dan penggunaan perpustakaan.
Flowzard
Buat aliran
class MainFlow(flowManager: FlowManager) : Flow(flowManager) {
Buat flow navigator
Navigator melakukan dua fungsi: Buat wadah aliran (Aktivitas, Fragmen, Tampilan) untuk transisi antara aliran dan layar untuk transisi di dalam aliran.
class DefaultFlowNavigator(activity: AppCompatActivity) : SimpleFlowNavigator(activity){
Jepret ke Aktivitas
Untuk mengaitkan Aktivitas dengan Flow, kami mewarisi FlowActivity dan menyediakan Navigator, dalam kasus kami DefaultFlowNavigator.
class MainActivity : FlowActivity() { override val navigator: Navigator get() = DefaultFlowNavigator(this) }
Buat FlowManager
class DefaultFlowManager : FlowManager() {
Perpesanan antara aliran dan layar
Ketika Anda mengklik tombol login, aktivitas mengirim pesan ke aliran utama. Flow membuat aliran SIGN_UP dan menunggu respons darinya. Jika login berhasil, aliran SIGN_UP mengirimkan hasilnya ke aliran utama dan onFlowResult: MainFlow dipanggil dengan kode dan objek hasil. Aliran utama memeriksa apakah hasilnya benar kemudian mengirim pesan kembali ke aktivasi yang telah berhasil dilakukan pengguna.
class MainFlow(flowManager: FlowManager) : Flow(flowManager) { companion object { const val LOGIN_REQUEST_CODE = 1 }
Menyimpan keadaan saat mengubah konfigurasi atau ketika suatu proses menghentikan sistem operasi
Karena Android menyimpan tumpukan Aktivitas dan Fragmen, aliran yang dibuat dengan wadah ini akan menyimpan dan memulihkan keadaannya. Dengan wadah Lihat, Anda harus menulis FlowManager khusus Anda karena perpustakaan belum memiliki manajer seperti itu. Di pembaruan berikutnya akan ada fitur untuk menyimpan data antara dari aliran.
Karena saya tidak ingin banyak kode dalam artikel, saya akan membatasi diri pada contoh ini. Berikut ini tautan ke repositori untuk studi terperinci tentang perpustakaan.