What is the best way of getting / using Context inside AsyncTask?
android, android-asynctask, android-context, constructor, inner-classes
Solution
Simply create the AsyncTask as an inner class of your Activity, or pass the Context to the Constructor of the AsyncTask.
Inner class: MyActivity.java
public class MyActivity extends Activity {
// your other methods of the activity here...
private class MyTask extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void... param) {
publishProgress(...); // this will call onProgressUpdate();
}
protected Void onProgressUpdate(Void... prog) {
Toast.makeText(getActivity(), "text", 1000).show();
}
}
}
Constructor: MyTask.java
public class MyTask extends AsyncTask<Void, Void, Void> {
Context c;
public MyTask(Context c) {
this.c = c;
}
protected Void doInBackground(Void... param) {
publishProgress(...); // this will call onProgressUpdate();
}
protected Void onProgressUpdate(Void... prog) {
Toast.makeText(c, "text", 1000).show();
}
}
Furthermore, please do not forget to call .show() on your Dialog.
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.show();
Problem
I've defined a separate thread by extending the `AsyncTask` class. Within this class I perform some Toasts and Dialogs within the AsyncTask's `onPostExecute` and `onCancelled` methods. The toasts require the application's context such that all I need do is: ``` Toast.makeText(getApplicationContext(),"Some String",1); ``` The dialogs are created using `AlertDialog.Builder` which also requires a context in its constructor. Am I right in thinking that this context should be the Activity's context? i.e. ``` AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); ``` where `getActivity` could be a user defined class that returns the current activity. If so what is the best way to handle this situation? Creating a class like `getActivity` or passing the current activity's context to the AsyncTask's constructor? I guess I'm trying to understand the use of `Context` - I have noticed that memory leaks can be an issue (don't really understand this yet) and how using `getApplicationContext()` is the best approach where possible.