Passing context from Service to AsyncTask without leaking it

Mustansir :

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

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

I have seen a 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?

CommonsWare :

I have a Service from which I am starting AsyncTask from a given timer to do background tasks.

Don't use an AsyncTask. Use a thread. Or, better yet, used ScheduledExecutorService for the timing component, as that will execute tasks on a background thread. AsyncTask is only appropriate for when you need to do work on the main application thread when the background part is done, and that's rarely required with a service.

Also, bear in mind that your timer will stop working once your process terminates.

So my question is, how can I use context in my AsyncTask(top level class) without leaking it?

Call getApplicationContext() on the Service and use that Context.

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=434556&siteId=1