Saya telah mengembangkan beberapa aplikasi untuk Android, dan pertanyaan ini selalu muncul:
Bagaimana cara menyusun UI saya? Haruskah saya meluncurkan aktivitas setelah aktivitas dan meninggalkan ponsel untuk membuat tombol "kembali", atau haruskah saya memilih yang lebih dioptimalkan, tetapi lebih rumit untuk diterapkan, dengan cara beralih Tampilan secara manual dan kemudian secara manual melakukan fungsi tombol "Kembali"?
Menurut Anda (atau ketahui) apa praktik yang lebih baik?
Jawaban:
Saya akan mengatakan bahwa beberapa Aktivitas hampir selalu lebih masuk akal. Saya hanya berpikir Android tidak dirancang untuk terus-menerus berpindah tampilan - Anda kehilangan banyak hal. Anda harus mengimplementasikan Back sendiri, Anda tidak mendapatkan transisi antar-Aktivitas, Anda harus menerapkan banyak logika internal untuk melanjutkan aplikasi dalam keadaan yang benar. Jika Anda tidak mempartisi aplikasi Anda menjadi Aktivitas, itu akan membuat jauh lebih sulit nantinya untuk mengubah aliran aplikasi Anda. Ini juga menghasilkan satu mega-Aktivitas yang bisa jauh lebih sulit untuk ditangani daripada banyak potongan kode yang lebih kecil.
Saya kesulitan membayangkan bahwa kecepatan benar-benar menjadi masalah; jika ya, maka ada yang salah dengan cara Anda menginisialisasi setiap Aktivitas. Sebagai contoh, saya mencoba untuk melewatkan objek Serializable antara Aktivitas, dan itu terbukti sangat lambat; ketika saya beralih ke metode yang lebih cepat untuk mengoper objek, kecepatan peluncuran Aktivitas meningkat pesat.
Selain itu, saya pikir ini memberi tahu bahwa pedoman Android untuk Aktivitas dan Desain Tugas tidak menyebutkan peralihan Tampilan sama sekali; itu berpusat di sekitar desain Activity-as-View.
sumber
Saya ingin menunjukkan beberapa contoh ketika satu aktivitas mungkin merupakan desain yang lebih baik untuk aplikasi Android yang memiliki lebih dari satu Tampilan layar penuh:
Jika layar aplikasi digabungkan dengan erat dan berbagi Objek umum tempat semuanya beroperasi. Dalam kasus ini, mengedarkan Objek mungkin memerlukan Bundel dan dapat rawan kesalahan karena akan ada salinannya. Contoh yang bagus mungkin adalah seorang penyihir . Ya, Anda dapat menggunakan statis untuk mengakses Objek umum tetapi statis dapat berbahaya di Android (pikirkan perubahan konfigurasi!)
Jika Anda menginginkan animasi yang sangat keren di antara layar. Mungkin Anda ingin burung lepas landas di satu layar dan mendarat di layar lain. Coba lakukan itu ketika setiap layar adalah aktivitas!
Di sisi lain, jika salah satu layar Anda dirancang untuk ditampilkan oleh sejumlah aplikasi lain, maka layar itu haruslah Aktivitasnya sendiri.
UPDATE Maret 2014:
Pada titik ini pertanyaannya sekarang harus mencakup pilihan Fragmen. Menurut saya, Views mungkin adalah pilihan yang paling tidak mungkin dari 3: Aktivitas, Fragmen, Tampilan. Jika Anda ingin mengimplementasikan layar yang menggunakan tombol kembali maka itu harus Activties atau Fragments karena keduanya menangani tombol kembali secara native. Fragmen perlu ditambahkan ke tumpukan belakang FragmentManager agar tombol kembali berfungsi. Mengelola fragmen, dialog, dan back-stack bisa jadi sedikit mengganggu!
UPDATE Sept 2018:
Beberapa pengembang di Google merekomendasikan aplikasi aktivitas tunggal menggunakan komponen arsitektur navigasi baru .
sumber
Ingat juga bahwa mengimplementasikan aplikasi Anda dengan beberapa
Activities
akan memberikan pengalaman yang lebih koheren kepada pengguna dengan platform secara keseluruhan. Sebagian dari pengalaman akan dibentuk dengan menggunakan aplikasi Google bawaan, sehingga pengguna mungkin akan lebih mudah menggunakan aplikasi Anda jika perilakunya mirip dengan yang sudah diinstal di ponsel.sumber
Berbeda dari yang lain saya menggunakan campuran keduanya, misalnya,
1. Ada menu utama saat aplikasi dijalankan
2. Anda klik pada pencarian, membawa Anda ke aktivitas pencarian
3. Lalu ada tombol filter, yang hanya mengalihkan tampilan dan pertunjukan Anda memfilter opsi
4. Ada dua tombol di akhir tampilan filter, Anda menekan "Cari" atau "Batal" dan Anda kembali ke Tampilan Pencarian lagi (tanpa mengalihkan aktivitas)
5. Sekarang jika pengguna menekan telepon kembali tombol dia dibawa kembali ke menu utama alih-alih opsi filter pencarian. Yang saya kira adalah perilaku yang benar.
Gunakan dengan cara yang akan membuat pengguna merasa alami. Dan menyimpan semuanya dalam satu aktivitas akan membuatnya kompleks.
sumber
Itu semua tergantung pada aplikasi, apa yang Anda coba untuk mencapai kinerja yang lebih baik, UI yang lebih halus. IMHO Saya lebih suka pendekatan kedua untuk mengendalikan Kegiatan secara manual meskipun itu lebih kompleks seperti yang Anda nyatakan. Ini adalah pendekatan yang telah saya gunakan dalam proyek tab android saya, Anda juga mungkin ingin melihat kelas yang disebut ActivityGroup (tidak yakin paketnya) yang memungkinkan Anda memiliki banyak aktivitas yang dapat Anda alihkan, hal yang baik tentang kelas ini adalah aktivitas Anda tidak diturunkan saat Anda beralih, tetapi hal buruknya adalah perlu waktu lebih lama untuk memuat aplikasi utama Anda.
Hanya pendapat saya.
sumber
Masalah dengan berpindah tampilan, yang saya temukan, juga disebabkan oleh pengumpul sampah. Tampaknya GC dipicu saat Anda keluar dari aktivitas, bukan tampilan. Jadi, mengubah tab dengan tampilan turunan yang cukup kompleks, misalnya, hampir pasti akan menyebabkan pengecualian stack overflow ..
sumber
Saya telah mengalami begitu banyak masalah dengan beberapa layout aktivitas sehingga saya sangat tidak menyarankannya, kecuali jika ada alasan bagus untuk memilihnya.
Kerugian dari banyak aktivitas
Menggunakan banyak aktivitas, sangat sulit untuk memfaktor ulang kode untuk mengembalikan data dari aktivitas.
Jika Anda memanggil 'sub'-aktivitas maka aktivitas utama mungkin dimatikan. Tetapi Anda tidak pernah mengalaminya saat men-debug pada perangkat yang layak, oleh karena itu Anda harus selalu menangani status penyimpanan dan status pemulihan dengan benar. Itu menyakitkan. Bayangkan memanggil metode pada sebuah pustaka (mis. Aktivitas lain), dan Anda harus memastikan bahwa ketika metode itu mengembalikan, aplikasi Anda harus dapat membuat ulang statusnya sepenuhnya dengan semua bidang pada semua objek di VM (mis. Aktivitas. restoreIntance). Ini gila.
Begitu pula sebaliknya, saat Anda membuka subaktivitas, VM mungkin telah dimatikan sejak subaktivitas pertama kali muncul, seperti saat aplikasi diminimalkan saat subaktivitas ditampilkan.
Jauh lebih bersih hanya memiliki satu tempat untuk menyimpan status aplikasi yang relevan, dan dalam kasus saya, paling sering jika VM dimatikan, saya ingin mengembalikan pengguna ke layar utama, dan membiarkan mereka melakukan tugasnya lagi, karena saya tidak Tidak menghabiskan 30-50 jam coding menyimpan / melanjutkan fungsionalitas yang akan dialami oleh 0,1% pengguna.
Alternatif
Fragmen atau hanya mengelola tampilan aktivitas Anda sendiri. Mengelola tampilan secara manual, memerlukan pengkodean beberapa alternatif pengalihan tampilan untuk aktivitas / fragmen dengan transisi jika diinginkan.
Dan tidak, itu tidak berarti satu mega-aktivitas, seperti yang disarankan dalam jawaban yang diterima, dengan cara apa pun selain satu mega-app-nya. Ini hanya membutuhkan sedikit lebih banyak desain basis kode menjadi bagian-bagian yang pas, karena ada sedikit lebih banyak pekerjaan yang mengelola tampilan, meskipun lebih sedikit pekerjaan yang mengelola status aktivitas dan keanehan lainnya.
Mungkin relevan: Reddit: Resmi: Google secara resmi merekomendasikan arsitektur aplikasi aktivitas tunggal
sumber