创建类扩展AsyncTask而不泄漏Android Kotlin中的上下文对象

时间:2017-09-04 04:36:20

标签: android kotlin

我定义了一个基类extends AsyncTask并且有一些自定义方法。我想创建一些extend这个和override一些方法的子类。但通过这种方式,它的字段将泄漏Context对象。

abstract class ParentTask(context: Context) : AsyncTask<Void, Int, String>() 
{
    ...
    override fun doInBackground(vararg params: Void): String? {
        ...
    }
    ...
}

请告诉我原因并告诉我如何在Android Kotlin中实现它?如果有一个关于此的例子,我非常感激。 p / s:我搜索了这个,但无法理解。为什么使用Singleton或其他设计模式

1 个答案:

答案 0 :(得分:3)

你不能以这种方式避免这种警告,但你可以处理你的上下文是应用程序上下文并且它不会泄漏:

    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? {
            //...
        }
    }