美文网首页
Dialog关不掉

Dialog关不掉

作者: Shawn_GBWang | 来源:发表于2018-06-29 11:15 被阅读0次

    问题描述:我在Activity中show了一个dialog关不掉了。

    场景描述:我在A活动里,onCreate初始化了一个DIalog和一个CountDownTimer类型的计数器,并在计时器的构造中,传入当前的handler对象。计时器被我写成单例的。

    然后当我点击A按钮的时候,启动Dialog和计时器,计时器倒计时5秒,发出消息,在handleMessage中,收到发送的消息,然后关闭Dialog。

    第一次进入活动,点击A按钮,过5秒,收到消息然后关闭dialog,这个操作是正常的。但是当我退出当前活动

    第二次进入活动,点击A按钮,过5秒,收到消息后,就关闭不掉这个dialog了。整个活动都是重新初始化的。

    分析:经过一番测试之后,我发现dialog中的mShowing这个属性,在我第二次进入活动,并且dialog.show()调用之后,被修改为true。过五秒后,在handleMessage中,调用dialog.hide(),这时dialog的mShowing这个属性确是false,然后就关不掉dialog了。

    如何解决:最后我是如何解决的呢,我把CountDownTimer这个计时器创建的单例给取消了,每次都重新创建一个新的对象并接收当前活动的handler对象。

    后续:

    dialog对象

    情况1:CountDownTimer是单例模式,并持有当前活动的handler对象

    messageDialog1  hashcode:29560034是我第一次进入活动创建的dialog对象,然后我退出当前活动。

    第二次进入活动,创建了一个新的dialog对象messageDialog1 hashcode:96367861

    但是,当五秒过后,在handleMessage中,收到消息关闭dialog时,这个dialog对象反而是第一次创建的dialog对象

    看hashcode

    所以关闭不了dialog,因为根本就不是同一个对象。原因会继续找。

    TIPS:这里做一个小结,建议不要在单例类中,持有hanlder对象,否则就会发生这种操蛋的问题。

    相关文章

      网友评论

          本文标题:Dialog关不掉

          本文链接:https://www.haomeiwen.com/subject/lcaoyftx.html