android是否有任何视图回调,当它被销毁?

时间:2015-07-22 23:02:54

标签: android view callback ondestroy

我有一个自定义视图组件。我在片段或活动中使用它。我想知道当它从片段/活动中被销毁时是否有回调?

2 个答案:

答案 0 :(得分:21)

查看没有回调(finalize()除外,但我不认为这是你要求的)。当视图从屏幕上移除时,视图有onDetachedFromWindow(),但这与被销毁无关 - 它可以再次附加,这将调用onAttachedToWindow()

片段有onDestroyView(),这可能对您更有用。活动没有等效方法,但只要您知道如果系统决定意外终止您的应用,则可能永远不会调用onDestroy()

答案 1 :(得分:-1)

感谢 Karakuri 的答案,提供了可选的解决方案(使用简单的回调)

注意

view OnLayoutChangeListener在视图从窗口分离之前未调用

   view.listener = object :OnViewAttachedChangeListener{
                    override fun onAttachedFromWindow(view: View, isAttached: Boolean) {
    
                    }
                }

添加简单的回调以跟踪附件状态。

   internal class AttachedView(context: Context): View(context){

        internal var listener: OnViewAttachedChangeListener?= null
            get() = field

        override fun onDetachedFromWindow() {
            super.onDetachedFromWindow()
            notifyOnAttachedToWindow(false)
        }

        override fun onAttachedToWindow() {
            super.onAttachedToWindow()
            notifyOnAttachedToWindow(true)
        }

        private fun notifyOnAttachedToWindow(isAttached: Boolean){
            listener?.onAttachedFromWindow(this, isAttached)
        }
    }

    internal interface OnViewAttachedChangeListener{
        fun onAttachedFromWindow(view: View, isAttached: Boolean)
    }