当前位置: 首页 > 面试题库 >

从服务传递上下文到AsyncTask而不泄漏它

冉锋
2023-03-14
问题内容

我有一个Service正在AsyncTask从给定的计时器开始执行后台任务的方法。我需要短暂的网络任务,所以这就是我坚持的原因AsyncTask

AsyncTask,我正在执行需要执行的许多操作(例如启动通知)Context。现在,在初始化ContextAsyncTask,我得到一条警告:“
此字段泄漏了上下文对象

我看到了许多关于相同的问题,但是它们都与之有关Activity/Fragment。所以我的问题是,如何Context在我的AsyncTask(顶级课程)中
使用它而不泄漏它


问题答案:

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

不要使用AsyncTask。使用线程。或者更好的是,它ScheduledExecutorService用于计时组件,因为它将在后台线程上执行任务。AsyncTask
唯一 适当的,因为当你需要做的主应用程序线程工作时的背景部分已经完成,而这很少与服务所需。

另外,请记住,一旦进程终止,计时器将停止工作。

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

呼叫getApplicationContext()Service和使用Context



 类似资料:
  • 在Spring MVC应用程序中,我使用以下方法初始化一个服务类中的变量: UserLibrary是我在应用程序中使用的第三方实用程序。上面的代码为“context”变量生成警告。警告如下所示: 我不明白这个警告。由于应用程序是一个Spring MVC应用程序,当我在应用程序运行时引用服务时,我不能真正关闭/破坏上下文。警告到底想告诉我什么?

  • 本文向大家介绍Android 避免使用AsyncTask泄漏活动,包括了Android 避免使用AsyncTask泄漏活动的使用技巧和注意事项,需要的朋友参考一下 示例 注意:AsyncTask除了这里描述的内存泄漏之外,还有很多陷阱。因此,请谨慎使用此API,如果您不完全了解其含义,请完全避免使用它。有很多选择(线程,EventBus,RxAndroid等)。 一个常见的错误AsyncTask是

  • 我正在尝试简单地找到一个带有MDN的设备,保存IP并杀死“网络服务发现”(NSD)一旦完成。 NSD和AsyncTask在这里冲突。 使用NSD获取IP是可行的,但如果AsyncTask不是静态的,它会警告泄漏。 如果AsyncTask是静态的,则NSD从onPostExecute()表示; 非静态字段'mNSDManager'不能从静态上下文引用 如果我将AsyncTask设置为静态但必须注释掉

  • 我目前正在使用Spring Boot和基于注释的配置来管理我的Spring应用程序。该项目由注册和外部服务库组成。 服务由带有注释的类组成,并在这些类中注入了。 注册将注入。 项目结构(4个maven项目): 注册对服务有maven依赖。 个人服务: PersonRepository: 服务库配置: 应用程序配置: Spring boot在POM中定义用于应用。 我经常遇到的一个例外是,类无法被注

  • 我有一个后台服务正在运行,它正在将数据同步到我的服务器。 泄漏发生在以下代码中: 内存分析器显示: stockserv.datasyncer.jobexecutor@0x135f6550上的线程保留了总大小为18.603.056(37,90%)字节的局部变量。内存累积在“”加载的“java.lang.Object[]”的一个实例中。 JobExecutor->Arraylist->Object[2

  • 我今天刚开始搞砸Android Studio,并按照一个工作教程制作了一个用户登录页面。第一个活动显示出来,但是当我按下登录按钮时,应用程序崩溃并显示以下错误代码: 第一个 9505-9538/?E/AndroidRuntime致命异常:async task # 1 Process:com . example . aks . mobile pos,PID:9505 Java . lang . ru