Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -646,18 +646,28 @@ class KRWrapperImageView(context: Context) : KRView(context) {

override fun resetProp(propKey: String): Boolean {
var result = super.resetProp(propKey)
result = imageView.resetProp(propKey)
if (!result) {
result = imageView.resetProp(propKey)
}
if (propKey == PROP_PLACEHOLDER) {
removePlaceholder()
setPlaceholder("")
result = true
}
return result
}

override fun onDestroy() {
super.onDestroy()
placeholderView?.onDestroy()
placeholderView = null
imageView.onDestroy()
}

private fun setPlaceholder(src: String) {
if (placeholder != src) {
placeholder = src
placeholderView?.removeFromParent()
placeholderView?.onDestroy()
if (placeholder.isNotEmpty()) {
placeholderView = KRImageView(context).apply {
val lp = LayoutParams(this@KRWrapperImageView.frameWidth,
Expand All @@ -668,17 +678,11 @@ class KRWrapperImageView(context: Context) : KRView(context) {
this@KRWrapperImageView.addView(this, 0)
}
} else {
removePlaceholder()
placeholderView = null
}
}
}

private fun removePlaceholder() {
placeholderView?.removeFromParent()
placeholderView = null
placeholder = ""
}

companion object {
private const val PROP_PLACEHOLDER = "placeholder"
const val VIEW_NAME = "KRWrapperImageView"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ class KuiklyRenderLayerHandler : IKuiklyRenderLayerHandler {
*/
private val renderViewReuseListMap = ArrayMap<String, MutableList<RenderViewHandler>>()

private var isDestroyed = false

override fun init(renderView: IKuiklyRenderView) {
renderViewWeakRef = WeakReference(renderView)
}
Expand Down Expand Up @@ -255,6 +257,10 @@ class KuiklyRenderLayerHandler : IKuiklyRenderLayerHandler {
override fun getView(tag: Int): View? = getRenderViewHandler(tag)?.viewExport?.view()

override fun onDestroy() {
assert(isMainThread()) {
"must call on ui thread"
}

moduleRegistryWRLock.withReadLock {
for (module in moduleRegistry.values) {
module.onDestroy()
Expand All @@ -264,7 +270,19 @@ class KuiklyRenderLayerHandler : IKuiklyRenderLayerHandler {
for (i in 0 until renderViewRegistry.size()) {
renderViewRegistry.valueAt(i).viewExport.onDestroy()
}
renderViewRegistry.clear()

for (i in 0 until renderViewReuseListMap.size) {
val queue = renderViewReuseListMap.valueAt(i)
for (j in 0 until queue.size) {
queue[j].viewExport.onDestroy()
}
queue.clear()
}

isDestroyed = true
}

private fun getRenderViewHandler(tag: Int): RenderViewHandler? {
assert(isMainThread()) {
"must call on ui thread"
Expand Down Expand Up @@ -318,36 +336,38 @@ class KuiklyRenderLayerHandler : IKuiklyRenderLayerHandler {
private fun pushRenderViewHandlerToReuseQueue(
viewName: String,
renderViewHandler: RenderViewHandler
) {
): Boolean {
assert(isMainThread()) {
"must call on ui thread"
}
if (!renderViewHandler.viewExport.reusable) {
return
return false
}
var reuseQueue = renderViewReuseListMap[viewName]
if (reuseQueue == null) {
reuseQueue = mutableListOf()
renderViewReuseListMap[viewName] = reuseQueue
}
if (reuseQueue.size >= MAX_REUSE_COUNT) {
return
return false
}

prepareForReuse(renderViewHandler.viewExport) // 重置View的样式,防止复用的时候样式错乱
reuseQueue.add(renderViewHandler)
return true
}

private fun innerRemoveRenderView(tag: Int) {
val renderViewHandler = getRenderViewHandler(tag)
assert(renderViewHandler != null)
assert(renderViewHandler != null || isDestroyed)

renderViewHandler?.viewExport?.also {
pushRenderViewHandlerToReuseQueue(renderViewHandler.viewName, renderViewHandler)
it.removeFromParent()
it.onDestroy()
renderViewHandler?.also {
it.viewExport.removeFromParent()
if (!pushRenderViewHandlerToReuseQueue(it.viewName, it)) {
it.viewExport.onDestroy()
}
removeRenderViewHandler(tag)
}
removeRenderViewHandler(tag)
}

private fun getShadowHandler(tag: Int): IKuiklyRenderShadowExport? {
Expand Down