Android: What's the better practice, using a global string or intents with extra data?

On a current Android project, I pass some data between a couple activities. I was just curious if there is a best practice on sending data between activities. I have a string that will be updated/appended based on the results of one activity, then used for a Facebook share two activities later. Should this string be set as a global static string, then shared, or should I pass the string using intent.PutExtra?

The global string is probably less code, but means another static variable. Alternatively, the intent Extra is fine, but seems repetitive since it's being passed through a couple activities. Either way will work, just would like to know if one is preferred above another.

Answers


In my view, only the Intent will work. On Android your application has to be prepared for the event it is killed (for example, an incoming video call puts it into background and also consumes a lot of memory so the background apps are killed). When Android restores your app, it restarts the Activity that was showing and resends the Intent that started it, because these are saved to persistent storage. But the state of other classes (including their static variables) is not saved, and if you don't save them, is lost/reset.


You should always avoid using global variables. Sometimes you'll need them and in most cases this comes due to an design issue. You should not use global variables "because of less code" or easier coding. BTW that only belongs to public static variables not to constants. Global variables make your life harder because of

  • Your code is harder to read (where does that variable come from..it's out of "scope")
  • Harder to test (who reads the variable? who modifies the variable?)
  • No access control (no getter/setter)
  • Threading
  • and many many more

Intent with extra data. better to pass on getExtras and your parent activity has predefined events to trace when the child activity finished.


Need Your Help

Access class methods from Javascript on an aspx page

javascript asp.net .net

I'm trying to access class methods using Javascript in an aspx page. I would like to assign the value that is returned by the class method to a Javascript variable. I've added the import statemen...

Why do thread functions need to be declared as '__cdecl'?

c++ multithreading mfc boost

Sample code that shows how to create threads using MFC declares the thread function as both static and __cdecl. Why is the latter required? Boost threads don't bother with this convention, so is it