将上下文从服务传递到异步任务而不泄漏

Passing context from Service to Asynctask without leaking it(将上下文从服务传递到异步任务而不泄漏)
本文介绍了将上下文从服务传递到异步任务而不泄漏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 Service,我从给定的计时器启动 AsyncTask 来执行后台任务.我的需求需要短时间的网络任务,这就是为什么我坚持使用 Asynctask.

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.

来自 Asynctask 我正在做一些需要 context 的操作(例如启动通知).现在,当我在 AsyncTask 中初始化 context 时,我收到一个警告这个字段泄漏了一个上下文对象."

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."

我已经看到许多关于相同的问题,但它们都与 Activity/Fragment 相关.所以我的问题是,如何在我的 AsyncTask(顶级类)使用 context 而不泄漏它?

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?

推荐答案

我有一个服务,我从一个给定的计时器启动 AsyncTask 以执行后台任务.

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

不要使用 AsyncTask.使用线程.或者,更好的是,使用 ScheduledExecutorService 作为计时组件,因为它将在后台线程上执行任务.AsyncTask适用于在后台部分完成后需要在主应用程序线程上进行工作的情况,而服务很少需要这样做.

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.

所以我的问题是,如何在我的 AsyncTask(顶级类)中使用上下文而不泄漏它?

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

Service 上调用 getApplicationContext() 并使用该 Context.

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

这篇关于将上下文从服务传递到异步任务而不泄漏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

How can create a producer using Spring Cloud Kafka Stream 3.1(如何使用Spring Cloud Kafka Stream 3.1创建制片人)
Insert a position in a linked list Java(在链接列表中插入位置Java)
Did I write this constructor properly?(我是否正确地编写了这个构造函数?)
Head value set to null but tail value still gets displayed(Head值设置为空,但仍显示Tail值)
printing nodes from a singly-linked list(打印单链接列表中的节点)
Control namespace prefixes in web services?(控制Web服务中的命名空间前缀?)