What is the correct way to implement a constructor in android?
It seems that in an Activity or Service ‘onCreate()’ is where the magic happens.
The reason I ask is because I would like to be sure I’m doing the right thing declaring
attributes in the top of my classes (Context in particular) and then setting the attribute values inside onCreate.
// Activity launched via an Intent, with some 'extras'
public class SomeActivity extends Activity {
private Context context;
private String foo;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the object attribute for later use, good or Bad to do this?
context = getApplicationContext();
Intent fooIntent = getIntent();
foo = fooIntent.getStringExtra("foo");
}
private void someMethodThatNeedsContext() {
// For example:
Cursor c = this.context.getContentResolver().query(foo, xxx, xxx);
// Or is it better practice to:
// A) Pass the context as a local variable to this method
// B) Use getApplicationContext() locally when needed
}
}
Maybe either of these options is ok, and I’m over thinking it?
Any specific reading and/or suggestions you may have would greatly be helpful to me.
Option B – Since you can call
getApplicationContext()from any non-static methods in your Activity class.In fact, Activity is derived from Context too (Somewhere in the inheritance tree..) so you can just do:
You don’t have to keep a reference to a context. Especially not static, that can cause problems.
And you are correct – since you usually don’t create your own constructor for Activities, you put the code for construction in
onCreate.