Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android intent extra message versus static variable

What is the purpose of using an intent with a message instead of just declaring a static variable in java and calling it from the new activity? It seems easier to me this way because you can have the static variable be anything you want (i.e. ArrayList, Object, etc.).

public class FirstActivity extends Activity {
    public static String name;
... 
    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    name = "Robert";
    startActivity(intent);
}

public class SecondActivity extends Activity {
...
    textView.setText(FirstActivity.name);
}
like image 841
The Hawk Avatar asked Feb 13 '13 22:02

The Hawk


2 Answers

By using extras to start SecondActivity, you make it more reusable. Many of the stock activities work this way, that's why you can reuse for example the camera activity to take and save photos, because it does not make assumptions about who is calling it.

In your case SecondActivity depends on FirstActivity having been loaded in the JVM. I would not count on that, and it's certainly not a recommended practice to have such dependency between activities. Don't do this. Use extras to pass values between activities, as recommended by the SDK.

like image 121
janos Avatar answered Oct 20 '22 17:10

janos


To clarify, the OP's strategy won't work if another app outside of his/hers wants to handle the Intent. Because of this, it's not a "best practice".

There are roughly 30 different putExtra variations for an Intent, each representing a different data type you can add. They include general purpose data types such as Bundle, Parcelable, Serializable, and so forth. I can't think offhand of anything that these don't cover.

I don't use statics or variables defined by overriding Application or other similar ways of assuming that some data is floating about in storage. It's much more robust to assume that my Activity or Fragment is totally independent.

like image 28
Joe Malin Avatar answered Oct 20 '22 15:10

Joe Malin