在Android Kotlin中创建不泄漏上下文对象的类extend AsyncTask
我定义了一个扩展在Android Kotlin中创建不泄漏上下文对象的类extend AsyncTask,android,kotlin,Android,Kotlin,我定义了一个扩展AsyncTask的基类,并有一些自定义方法。我想创建一些子类,这些子类extendthis,以及override一些方法。但是通过这种方式,它的字段将泄漏上下文对象 abstract class ParentTask(context: Context) : AsyncTask<Void, Int, String>() { ... override fun doInBackground(vararg params: Void): String? {
AsyncTask
的基类,并有一些自定义方法。我想创建一些子类,这些子类extend
this,以及override
一些方法。但是通过这种方式,它的字段将泄漏上下文
对象
abstract class ParentTask(context: Context) : AsyncTask<Void, Int, String>()
{
...
override fun doInBackground(vararg params: Void): String? {
...
}
...
}
抽象类ParentTask(上下文:context):AsyncTask()
{
...
重写fun doInBackground(vararg参数:Void):字符串{
...
}
...
}
请告诉我为什么,并告诉我如何在Android Kotlin中实现它?如果有这样的例子,我将不胜感激。
p/s:我被搜索过这个,但不明白。为什么使用Singleton或其他设计模式?您无法通过这种方式避免此警告,但您可以处理您的上下文是应用程序上下文,并且不会泄漏:
abstract class ParentTask(context: Context) : AsyncTask<Void, Int, String>() {
private val context: Context
init {
this.context = context.applicationContext
}
override fun doInBackground(vararg voids: Void): String? {
//...
}
}
抽象类ParentTask(上下文:context):AsyncTask(){
私有val上下文:上下文
初始化{
this.context=context.applicationContext
}
覆盖乐趣doInBackground(vararg voids:Void):字符串{
//...
}
}
只要context
是context.applicationContext
就不会泄漏任何活动。您是指构造函数中的上下文吗?这将如何泄漏?@s1m0nw此类中的所有视图字段也有此警告。我不知道它到底是怎么泄漏的。我认为只有在中的“对象”中定义上下文时才会发生这种情况Kotlin@EugenPechanec在androidstudio中,第行有一个警告:var context:context有人告诉我们让我们使用内部类。但我对我的case@s1m0nw1此字段泄漏的上下文对象较少。。。静态字段将泄漏上下文。非静态内部类对其外部类有一个隐式引用。例如,如果外部类是一个片段或活动,那么该引用意味着长时间运行的处理程序/加载程序/任务将持有对该活动的引用,从而防止其被垃圾收集。类似地,对这些较长时间运行的实例中的活动和片段的直接字段引用可能会导致泄漏。ViewModel类不应指向视图或非应用程序上下文。