Android M之前View实例化时报访问成员变量空指针的问题

一、 背景

最近在新需求中,遇到一个crash问题,具体堆栈是:

android.view.InflateException: Binary XML file line #227: Error inflating class XXXView
	at android.view.LayoutInflater.createView(LayoutInflater.java:633)
	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
	at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
	at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
	at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
	...
Caused by: java.lang.reflect.InvocationTargetException
	at java.lang.reflect.Constructor.newInstance(Native Method)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
	at android.view.LayoutInflater.createView(LayoutInflater.java:607)
	...
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.os.Handler.removeCallbacks(java.lang.Runnable)' on a null object reference
	at XXXView.cancelAnim(XXXView.kt:379)
	at XXXView.onVisibilityChanged(XXXView.kt:103)
	at android.view.View.dispatchVisibilityChanged(View.java:8895)
	at android.view.ViewGroup.dispatchVisibilityChanged(ViewGroup.java:1178)
	at android.view.View.setFlags(View.java:9990)
	at android.view.View.<init>(View.java:4231)
	at android.view.ViewGroup.<init>(ViewGroup.java:529)
	at android.view.ViewGroup.<init>(ViewGroup.java:525)
	at androidx.constraintlayout.widget.ConstraintLayout.<init>(ConstraintLayout.java:580)
	at XXXView.<init>(XXXView.kt:32)
	at XXXView.<init>(XXXView.kt:31)
	at XXXView.<init>(XXXView.kt)
	...

该异常堆栈对应的业务伪代码为:

class XXXView @JvmOverloads constructor(
    context: Context,
    attr: AttributeSet? = null,
    defStyleAttr: Int = 0
) : ConstraintLayout(context, attr, defStyleAttr) {
   

    private val mainHandler = Handler()
    private val actionDismiss = Runnable {
   ...}

    override fun onVisibilityChanged(changedView: View, visibility: Int) {
   
        super.onVisibilityChanged(changedView, visibility)
        if (changedView != this) return
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值