Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

public static variable or use putExtra method of intent class

I have a general question here about performance, and which of which should I do and which I should not use. I am actually using in my App two activities, let us call "theFirst" and "theSecond" activity.

In theFirst activity I have a public static object, in my case, its a list of a custom object made by me, called Conjunction.

When I call the theSecond activity I want to get the content of this list. So should I use the public static variable ? is there any problem? There will be only one instance of theFirst activity right? So no problem using public static variable..? I guess.

Or should I compute the entire list and put the information on a big String and send it to theSecond activity using the putExtra method?

A good explanation on this would be very good and I would really appreciate it :)

like image 492
TiagoM Avatar asked Mar 10 '13 13:03

TiagoM


1 Answers

Using static variables is not recommended. Static variables are stored in a PermGen section of the heap. Even if the class finishes it works the static variables stays in the heap. The garbage collector does mark and sweep. If you have a static variables in the 1st activity which is referenced in the 2nd activity, the link stays long. You might get memory leaks if your using more static variables. Also reduce use of unnecessary objects.

Static variables are referenced by Class objects which are referenced by ClassLoaders -so unless either the ClassLoader drops the Class somehow or the ClassLoader itself becomes eligible for garbage collection the static variables won't be garbage collected. So if you are using static variables referenced in many class those classes and the one in which static variables are declared cannot be garbage collected unless those classes are available for garbage collection. So this leads to heap memory expanding leading to memory leaks.

I recommend using puExtra for primitives types. In your case using singleton should help.

In this video the guy talks about why static variables should not be used and how to avoid memory leaks.http://www.youtube.com/watch?v=_CruQY55HOk. The guy talks about using MAT Analyzer to check for memory leaks.

Also have a look at this link. http://developer.android.com/guide/faq/framework.html.Have a look at the details under the heading *How do I pass data between Activities/Services within a single application?.

like image 52
Raghunandan Avatar answered Jan 08 '23 08:01

Raghunandan