Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Should I replace Android Activities by Fragments?

I have a large Android game in which there is an Activity for each logical screen. (Splash screen, start screen, level chooser, game screen and Settings are distinct Activities). Everything is working fine right now.

If I rewrite everything so that there is only one activity and the logical screens are Fragments, Will it reduce RAM or CPU consumption?

like image 235
Hello_World Avatar asked Apr 01 '15 14:04

Hello_World


People also ask

Is it better to use fragments or activities?

After using multiple fragments in a single activity, we can create a multi-screen UI. Fragment cannot be used without an Activity. While Using fragments in the project, the project structure will be good and we can handle it easily.

Can fragments replace activity?

At runtime, a FragmentManager can add, remove, replace, and perform other actions with fragments in response to user interaction. Each set of fragment changes that you commit is called a transaction, and you can specify what to do inside the transaction using the APIs provided by the FragmentTransaction class.

Should I use fragments Android?

You are correct, you don't need Fragments to support multiple screen sizes. But they should make it easier. You should be able to instantiate the exact same fragment either as a whole-screen activity on a phone or as a partial screen on a tablet with only a few lines of code to tell the difference.

What is the advantages of fragments over activity?

Fragments allow such designs without the need for you to manage complex changes to the view hierarchy. By dividing the layout of an activity into fragments, you become able to modify the activity's appearance at runtime and preserve those changes in a back stack that's managed by the activity.


2 Answers

After years (two+) of saying "Fragments are the way to go", I would never replace activities with Fragments again.

Using fragments to rehuse certain components is fine. Using fragments for dialogs is also fine, but I have now realized how awful the Fragment implementation is, how awful the Fragment lifecycle is and how unpredictable (and buggy) FragmentManager tends to be under certain circumstances. Go ahead an spend some time googling around and you will find all the "edge but not so edge" cases where hacks have to be implemented to work around a "by design" buggy behavior.

Sometimes you have to extend or copy the source code of these classes from the Android Source Code to modify a private or protected field…

Don't get me wrong, Fragments work. But they are not the solution to all your problems (they are possibly the source of new ones in the mid-long term). If you already have Activities, enjoy that! In fact, the new Transition Frameworks with Shared Elements is a clear indication that Google wants you to use more activities ;)

This is my personal opinion after working in roughly six mid-large sized Android projects (some are popular and you've probably used them!) ;)

like image 111
Martin Marconcini Avatar answered Oct 23 '22 22:10

Martin Marconcini


As far as I know, no, Fragments have (near to) no impact on RAM or CPU.

An Activity contains certain elements and performs some functionality. A Fragment is loaded onto an sort of base Activity, like an Activity with no more than an ActionBar. The rest is filled by the Fragment.

Also check out:

android - need some clarifications of fragments vs activities and views

Activity or Fragment which is better way to use for performance and reliable?

like image 43
Edwin Lambregts Avatar answered Oct 23 '22 23:10

Edwin Lambregts