Saya tahu bahwa Activities
dirancang untuk mewakili satu layar aplikasi saya, sementara Fragments
dirancang untuk menjadi tata letak UI yang dapat digunakan kembali dengan logika yang tertanam di dalamnya.
Sampai belum lama ini, saya mengembangkan aplikasi karena dikatakan bahwa mereka harus dikembangkan. Saya membuat sebuah Activity
untuk mewakili layar aplikasi saya dan menggunakan Fragmen untuk ViewPager
atau Google Maps
. Saya jarang membuat ListFragment
UI atau lainnya yang dapat digunakan kembali beberapa kali.
Baru-baru ini saya menemukan sebuah proyek yang hanya berisi 2 Activities
satu SettingsActivity
dan satu lainnya adalah MainActivity
. Tata letak MainActivity
diisi dengan banyak fragmen UI layar penuh tersembunyi dan hanya satu yang ditampilkan. Dalam Activity
logikanya ada banyak FragmentTransitions
antara layar aplikasi yang berbeda.
Apa yang saya sukai dari pendekatan ini adalah karena aplikasi menggunakan ActionBar
, ia tetap utuh dan tidak bergerak dengan animasi peralihan layar, yang terjadi dengan Activity
peralihan. Ini memberikan nuansa yang lebih lancar untuk transisi layar tersebut.
Jadi saya kira apa yang saya tanyakan adalah membagikan cara pengembangan Anda saat ini mengenai topik ini, saya tahu itu mungkin terlihat seperti pertanyaan berdasarkan pendapat pada pandangan pertama, tetapi saya melihatnya sebagai pertanyaan desain dan arsitektur Android ... opini berdasarkan satu.
UPDATE (01.05.2014): Mengikuti presentasi ini oleh Eric Burke dari Square , (yang harus saya katakan adalah presentasi yang hebat dengan banyak alat yang berguna untuk pengembang android. Dan saya tidak memiliki hubungan apa pun dengan Square)
http://www.infoq.com/presentations/Android-Design/
Dari pengalaman pribadi saya selama beberapa bulan terakhir, saya menemukan bahwa cara terbaik untuk membangun aplikasi saya adalah dengan membuat grup fragmen yang datang untuk mewakili aliran dalam aplikasi dan menyajikan semua fragmen dalam satu aplikasi Activity
. Jadi pada dasarnya Anda akan memiliki jumlah yang sama Activities
dalam aplikasi Anda dengan jumlah arus. Dengan begitu bilah tindakan tetap utuh di semua layar aliran, tetapi sedang diciptakan ulang untuk mengubah aliran yang sangat masuk akal. Seperti yang Eric Burke nyatakan dan seperti yang saya sadari juga, filosofi menggunakan sesedikit Activities
mungkin tidak berlaku untuk semua situasi karena itu menciptakan kekacauan dalam apa yang ia sebut aktivitas "Tuhan".
Jawaban:
Para ahli akan memberi tahu Anda: "Ketika saya melihat UI, saya akan tahu apakah akan menggunakan
Activity
atauFragment
". Pada awalnya ini tidak akan masuk akal, tetapi pada waktunya, Anda benar-benar dapat mengetahui apakah Anda perluFragment
atau tidak.Ada praktik baik yang menurut saya sangat membantu bagi saya. Itu terpikir oleh saya ketika saya mencoba menjelaskan sesuatu kepada putri saya.
Yaitu, bayangkan sebuah kotak yang mewakili layar. Bisakah Anda memuat layar lain di kotak ini? Jika Anda menggunakan kotak baru, apakah Anda harus menyalin beberapa item dari kotak pertama? Jika jawabannya Ya, maka Anda harus menggunakan
Fragments
, karena rootActivity
dapat menampung semua elemen yang digandakan untuk menghemat waktu Anda dalam membuatnya, dan Anda dapat dengan mudah mengganti bagian-bagian dari kotak.Tetapi jangan lupa bahwa Anda selalu membutuhkan wadah kotak (
Activity
) atau bagian Anda akan tersebar. Jadi satu kotak dengan bagian dalam.Berhati-hatilah agar tidak menyalahgunakan kotak. Saran ahli Android UX (Anda dapat menemukannya di YouTube) saat kami harus memuat yang lain secara eksplisit
Activity
, alih-alih menggunakanFragment
(seperti ketika kami berurusan dengan Drawer Navigasi yang memiliki kategori). Setelah merasa nyamanFragments
, Anda dapat menonton semua video mereka. Bahkan lebih dari itu adalah bahan wajib.Bisakah Anda sekarang melihat UI Anda dan mencari tahu apakah Anda memerlukan
Activity
atauFragment
? Apakah Anda mendapatkan perspektif baru? Saya pikir kamu melakukannya.sumber
Filosofi saya adalah ini:
Buat aktivitas hanya jika benar-benar diperlukan. Dengan tumpukan belakang tersedia untuk melakukan banyak transaksi fragmen, saya mencoba membuat sesedikit mungkin aktivitas di aplikasi saya. Juga, berkomunikasi antara berbagai fragmen jauh lebih mudah daripada mengirim data bolak-balik antara aktivitas.
Transisi aktivitas itu mahal, bukan? Setidaknya saya percaya begitu - karena aktivitas lama harus dihancurkan / dihentikan / dihentikan, didorong ke stack, dan kemudian aktivitas baru harus dibuat / dimulai / dilanjutkan.
Itu hanya filosofi saya sejak fragmen diperkenalkan.
sumber
onActivityResult()
lebih aman dan easer daripada callback fragmen.Nah, menurut kuliah Google (mungkin di sini , saya tidak ingat), Anda harus mempertimbangkan menggunakan Fragmen kapan pun memungkinkan, karena itu membuat kode Anda lebih mudah untuk dipelihara dan dikendalikan.
Namun, saya berpikir bahwa pada beberapa kasus itu bisa menjadi terlalu kompleks, karena aktivitas yang menampung fragmen perlu dinavigasi / berkomunikasi di antara mereka.
Saya pikir Anda harus memutuskan sendiri apa yang terbaik untuk Anda. Biasanya tidak sulit untuk mengubah suatu aktivitas menjadi sebuah fragmen dan sebaliknya.
Saya telah membuat posting tentang dillema ini di sini , jika Anda ingin membaca lebih lanjut.
sumber
Mengapa saya lebih suka Fragmen daripada Aktivitas di SEMUA KASUS.
Aktivitas itu mahal. Dalam Fragmen, tampilan dan status properti dipisahkan - setiap kali fragmen berada
backstack
, tampilan akan dihancurkan. Jadi, Anda dapat menumpuk lebih banyak Fragmen daripada Aktivitas.Backstack
manipulasi. DenganFragmentManager
, mudah untuk menghapus semua Fragmen, menyisipkan lebih dari pada Fragmen dan dll. Tapi untuk Aktivitas, akan menjadi mimpi buruk untuk memanipulasi hal-hal itu.Siklus hidup yang jauh dapat diprediksi . Selama Aktivitas tuan rumah tidak didaur ulang. Fragmen di backstack tidak akan didaur ulang. Jadi dimungkinkan untuk digunakan
FragmentManager::getFragments()
untuk menemukan Fragmen spesifik (tidak dianjurkan).sumber
Sejak Jetpack , aplikasi Single-Activity adalah arsitektur yang disukai. Berguna terutama dengan Komponen Arsitektur Navigasi .
sumber
sumber
Menurut saya itu tidak terlalu relevan. Faktor kunci untuk dipertimbangkan adalah
Penggunaan utama fragmen adalah untuk membangun aktivitas multipane, yang membuatnya sempurna untuk aplikasi responsif Tablet / Telepon.
sumber
Jangan lupa bahwa suatu kegiatan adalah blok / komponen aplikasi yang dapat dibagikan dan dimulai melalui Intent! Jadi setiap aktivitas dalam aplikasi Anda harus menyelesaikan hanya satu jenis tugas. Jika Anda hanya memiliki satu tugas dalam aplikasi Anda maka saya pikir Anda hanya perlu satu aktivitas dan banyak fragmen jika diperlukan. Tentu saja Anda dapat menggunakan kembali fragmen dalam kegiatan di masa mendatang yang menyelesaikan tugas lain. Pendekatan ini akan menjadi pemisahan tugas yang jelas dan logis. Dan Anda tidak perlu mempertahankan satu aktivitas dengan parameter filter maksud berbeda untuk set fragmen yang berbeda. Anda mendefinisikan tugas pada tahap desain proses pengembangan berdasarkan persyaratan.
sumber
Ada lebih dari ini yang Anda sadari, Anda harus ingat bahwa aktivitas yang diluncurkan tidak secara implisit menghancurkan aktivitas panggilan. Tentu, Anda dapat mengaturnya sehingga pengguna mengklik tombol untuk pergi ke halaman, Anda memulai aktivitas halaman itu dan menghancurkan yang sekarang. Ini menyebabkan banyak overhead. Panduan terbaik yang bisa saya berikan adalah:
** Mulai aktivitas baru hanya jika masuk akal untuk memiliki aktivitas utama dan yang ini terbuka pada saat yang sama (pikirkan beberapa jendela).
Contoh yang bagus tentang kapan masuk akal untuk melakukan banyak aktivitas adalah Google Drive. Aktivitas utama menyediakan penjelajah file. Ketika file dibuka, aktivitas baru diluncurkan untuk melihat file itu. Anda dapat menekan tombol aplikasi terbaru yang akan memungkinkan Anda untuk kembali ke browser tanpa menutup dokumen yang dibuka, lalu bahkan mungkin membuka dokumen lain secara paralel dengan yang pertama.
sumber
attach
/detach
metode.Hal yang saya lakukan: Menggunakan lebih sedikit fragmen jika memungkinkan. Sayangnya, hampir bisa dipastikan. Jadi, saya berakhir dengan banyak fragmen dan sedikit kegiatan. Beberapa kekurangan yang saya sadari:
ActionBar
& Menu: Ketika 2 fragmen memiliki judul, menu yang berbeda, ituakan sulit ditangani. Mis: saat menambahkan fragmen baru, Anda bisa mengubah judul bilah tindakan, tetapi saat mengeluarkannya
backstack
tidak ada cara untuk mengembalikan judul yang lama. Anda mungkin memerlukan Bilah Alat di setiap fragmen untuk kasus ini, tapi biarkan percaya padaku, itu akan menghabiskan lebih banyak waktu.startForResult
, aktivitas memiliki tetapi fragmen belum.Solusi saya untuk ini adalah menggunakan Aktivitas untuk membungkus bagian dalam. Jadi kami memiliki bilah tindakan, menu
startActivityForResult
,, animasi, ...sumber
getSupportFragmentManager().addOnBackStackChangedListener
untuk menambah pendengar. dapatkan fragmen saat ini di pendengar itu dan kemudian tetapkan judul dan hal-hal.Salah satu keuntungan besar dari
fragment
kegiatan di atas adalah bahwa, kode yang digunakan untuk fragmen dapat digunakan untuk activities.so yang berbeda, memberikan kembali kegunaan dari kode dalam pengembangan aplikasi.sumber
menggunakan satu kegiatan per aplikasi untuk menyediakan dasar untuk
fragment
digunakanfragment
untuk layar,fragments
yang berat lite dibandingkan denganactivites
fragmen yang dapat digunakan kembali fragmen yang lebih baik cocok untuk aplikasi yang mendukung kedua ponsel & tabletsumber
Anda bebas menggunakan salah satunya.
Pada dasarnya, Anda harus mengevaluasi mana yang terbaik untuk aplikasi Anda. Pikirkan tentang bagaimana Anda akan mengelola aliran bisnis dan bagaimana menyimpan / mengelola preferensi data.
Pikirkan, bagaimana Fragmen menyimpan data sampah. Saat Anda menerapkan fragmen, Anda memiliki root aktivitas untuk diisi dengan fragmen. Jadi, jika Anda mencoba menerapkan banyak kegiatan dengan terlalu banyak fragmen, Anda harus mempertimbangkan kinerja pada aplikasi Anda, karena Anda memanipulasi (berbicara secara kasar) dua siklus hidup konteks, ingat kompleksitasnya.
Ingat: haruskah saya menggunakan fragmen? Kenapa tidak?
salam.
sumber
Saya menggunakan Fragmen untuk pengalaman pengguna yang lebih baik. Misalnya jika Anda memiliki Tombol dan Anda ingin menjalankan katakanlah layanan web ketika Anda mengkliknya, saya melampirkan Fragmen ke Aktivitas induk.
Dengan cara itu pengguna tidak harus pindah ke aktivitas lain.
Dan kedua saya lebih suka Fragmen karena Anda dapat menanganinya dengan mudah selama rotasi.
sumber
Itu tergantung apa yang ingin Anda bangun. Misalnya
navigation drawer
menggunakan fragmen. Tab juga digunakanfragments
. Implementasi lain yang baik, adalah di mana Anda memilikilistview
. Ketika Anda memutar telepon dan mengklik satu baris, aktivitas ditampilkan di separuh layar yang tersisa. Secara pribadi, saya menggunakanfragments
danfragment dialogs
, karena lebih profesional. Plus mereka ditangani lebih mudah dalam rotasi.sumber