mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
LoadableImageView bitmap leak fix when view is placed into view pool
commit_hash:fe4d0028e8dbaf64b64170f170b9ca2f4d6cad95
This commit is contained in:
+6
@@ -35,4 +35,10 @@ internal open class DivGifImageView @JvmOverloads constructor(
|
||||
override fun draw(canvas: Canvas) {
|
||||
drawBorderClipped(canvas) { super.draw(it) }
|
||||
}
|
||||
|
||||
override fun release() {
|
||||
super<LoadableImageView>.release()
|
||||
super<DivHolderView>.release()
|
||||
gifUrl = null
|
||||
}
|
||||
}
|
||||
|
||||
+7
-7
@@ -13,6 +13,13 @@ internal interface DivHolderView<T: Div> : DivBorderSupports,
|
||||
|
||||
var div: T?
|
||||
var bindingContext: BindingContext?
|
||||
|
||||
override fun release() {
|
||||
super.release()
|
||||
div = null
|
||||
bindingContext = null
|
||||
releaseBorderDrawer()
|
||||
}
|
||||
}
|
||||
|
||||
internal class DivHolderViewMixin<T: Div> : DivHolderView<T>,
|
||||
@@ -24,11 +31,4 @@ internal class DivHolderViewMixin<T: Div> : DivHolderView<T>,
|
||||
override var bindingContext: BindingContext? = null
|
||||
|
||||
override val subscriptions = mutableListOf<Disposable>()
|
||||
|
||||
override fun release() {
|
||||
super.release()
|
||||
div = null
|
||||
bindingContext = null
|
||||
releaseBorderDrawer()
|
||||
}
|
||||
}
|
||||
|
||||
+6
@@ -38,4 +38,10 @@ internal open class DivImageView @JvmOverloads constructor(
|
||||
override fun draw(canvas: Canvas) {
|
||||
drawBorderClipped(canvas) { super.draw(it) }
|
||||
}
|
||||
|
||||
override fun release() {
|
||||
super<LoadableImageView>.release()
|
||||
super<DivHolderView>.release()
|
||||
imageUrl = null
|
||||
}
|
||||
}
|
||||
|
||||
-1
@@ -211,7 +211,6 @@ internal class DivRecyclerView @JvmOverloads constructor(
|
||||
|
||||
override fun release() {
|
||||
super.release()
|
||||
releaseBorderDrawer()
|
||||
val currentAdapter = adapter
|
||||
if (currentAdapter is Releasable) {
|
||||
currentAdapter.release()
|
||||
|
||||
-1
@@ -36,7 +36,6 @@ internal class DivVideoView @JvmOverloads constructor(
|
||||
playerView.detach()
|
||||
lastPlayer?.release()
|
||||
}
|
||||
releaseBorderDrawer()
|
||||
}
|
||||
|
||||
fun getPlayerView(): DivPlayerView? {
|
||||
|
||||
@@ -14,6 +14,7 @@ import android.view.ViewGroup
|
||||
import androidx.annotation.CallSuper
|
||||
import com.yandex.div.R
|
||||
import com.yandex.div.core.images.LoadReference
|
||||
import com.yandex.div.core.view2.Releasable
|
||||
import com.yandex.div.core.view2.divs.widgets.LoadableImage
|
||||
import com.yandex.div.core.view2.drawable.ScaleDrawable
|
||||
import com.yandex.div.internal.widget.AspectImageView
|
||||
@@ -24,7 +25,7 @@ open class LoadableImageView(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : AspectImageView(context, attrs, defStyleAttr), LoadableImage, DivExtendableView {
|
||||
) : AspectImageView(context, attrs, defStyleAttr), LoadableImage, DivExtendableView, Releasable {
|
||||
|
||||
@Deprecated("Use imageTransform instead")
|
||||
internal var currentBitmapWithoutFilters: Bitmap? = null
|
||||
@@ -185,6 +186,15 @@ open class LoadableImageView(
|
||||
imageChangeCallback = callback
|
||||
}
|
||||
|
||||
override fun release() {
|
||||
currentBitmapWithoutFilters = null
|
||||
externalImage = null
|
||||
sourceDrawable = null
|
||||
resetImageLoaded()
|
||||
getLoadingTask()?.cancel(true)
|
||||
cleanLoadingTask()
|
||||
}
|
||||
|
||||
interface ImageTransformer {
|
||||
|
||||
fun transform(drawable: Drawable?): Drawable?
|
||||
|
||||
Reference in New Issue
Block a user