I’m pretty much new to Android, but over the last two or three weeks I’ve managed to figure out most of its innards and how things work.
However, one thing is still bothering me – what’s the basic difference between Activities and simple forms? Well, I know Android doesn’t have such thing as a ‘form’, but by that I mean a fullscreen layout of elements that has an underlying class and all its functionality is executed in it, rather than in a process-wide class (Activity, to be precise).
As long as I understand, Activity is a separate process that’s instantiated by OS to perform some actions that are basicly independent of the whole application. That also means that we can run only one of the application’s activities, and it will still perform all of its functions without needing the whole application to be loaded. For example, if we have a movie player that can also convert movies from one codec to another, we can implement that functionality as a separate Activity so that other applications, like file managers, will also be able to convert movies between codecs using only that Activity, and not the whole application.
And that seems perfectly straightforward. The question is – why is everybody using separate Activities for functionality that cannot be separated from the application? In other words, people generally use Activities where I think simple forms within the same process would be more appropriate. For instance, I’ve seen people using a separate Activity for things like application settings, which obviously wouldn’t be be launched outside the app itself, or editing application-specific data, which wouldn’t be done outside the app as well, since the data to be edited should be selected from a list only known to the application.
Another example right from my experience – a unit converter application. It has a main menu with a GridView of units’ categories, in each category there is a list of units and by clicking any unit we have a ‘calculator’ form for entering value that we want to convert. If I’d been doing that like everyone suggests I’d have three Activities – one for the main menu, one for the list of units and one for entering the value. But why? Why would I want to launch any of those three Activities separate from the application? If I’d want to launch main menu Activity – well, why not launch the whole application then? If I want just a list of units – again, just launch the whole application, it’s not like some Facebook client is going to convert values between pressure units (since the list of units covers only one category at a time). And launching an activity for the calculator simply would not work, since it should return to the list to perform conversions and you’d have no list activity launched.
And anyway, even if I’m wrong and people use it wisely there’s still an issue that Android SDK doesn’t really provide any support for forms as I’m used to. Yes, there are things like ViewAnimator, ViewSwitcher etc. But all they do is switch layouts in their place, and that is hardly switching between forms as such. So the only choice to get close to that functionality at least is to use Activities. And we’re back to the square one.
So to put it simply – am I missing something from the Android philosophy? Because I’m pretty sure that using a separate Activity (and a separate process as a result) for every single form in the application is an overkill. And if it really is and everybody knows that – why doesn’t Android have any substantial form switching mechanism?
Thanks in advance for any clarification on this issue.
An activity isn’t spawned in a separate process (unless you explicitly tell it to). Everything in your APK will be spawned in your process. Even if another application is using your Activity for whatever reason.
You can make your Activity “effectively” private to your application by not assigning any intent-filter to it in your manifest.
For the examples given, a form is equal to an activity. That isn’t a universal statement as you delve deeper into Android, but for a beginner that’s a decent analogy to make. Another common analogy is that Activities are more like web pages than traditional forms based UI.