I am really new to Android development. In my app, I perform different async task and needed to save the result from those task to the database which requires context. Inspired from this answer I started using context in all my classes as a member variable. This seemed like a good method, but now ALL my background task and other classes which deal with preference have context as a member variable. 
Code example - 
public class Task extends AsyncTask<Void, Void, String> {
    Context context;
    public Task(Context context){
        super();
        this.context = context;
    }
    protected String doInBackground() {
       //myAsyncTask
    ..
    }
    ..
    protected void onPostExecute(String response) { //response from the request
      DbHelper helper = new DbHelper(context);
      //save to db
    }
I have about 3 or more of such tasks running consecutively at times. So whenever I need to do a background task, I first have to initialize the async task with the context and then initialize the DbHelper using that context. I feel like I'm doing it all wrong. This doesn't seem like a good method to me now (may lead to huge memory leaks imo). Plus it feels like duplication and that I can have access to the context in a better way.
Is it recommended to use context like this? Or does it actually have a disadvantage and I'm better off using some other method? Something like
public class MyApplication extends Application {
    private static Context context;
    public void onCreate(){
        super.onCreate();
        MyApplication.context = getApplicationContext();
    }
    public static Context getAppContext() {
        return MyApplication.context;
        //use context as MyApplication.getAppContext();
    }
}
Which one is better to use?
 
     
    