Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing context from Service to Asynctask without leaking it

I have a Service from which I am starting AsyncTask from a given timer to do background tasks. My need requires short burst of networking task that's why I am sticking with Asynctask.

From Asynctask I am doing number of operations(such as launching notifications) that requires context. Now, when I am initializing context in my AsyncTask I am getting a warning "This fields leaks a context object."

I have seen number of questions regarding the same but they all were related to Activity/Fragment. So my question is, how can I use context in my AsyncTask(top level class) without leaking it?

like image 854
Mustansir Avatar asked Aug 12 '17 17:08

Mustansir


1 Answers

You can pass a WeakReference in your AsyncTask, for example :

public class MyAsynctask extends AsyncTask<Void, Void, Void> {

   private WeakReference<Context> mWeakContext;

   public MyAsynctask (WeakReference<Context> reference) {
        mWeakContext = reference;
   }

   // when you need context use mWeakContext.get();
}

Hope this helps.

like image 92
Cochi Avatar answered Oct 05 '22 23:10

Cochi