如题,正常更新没有抛出异常

解决方案 »

  1.   

    getWindowManager的方法更新不行,但是textView的setText没一点问题
      

  2.   

    并不可以哦,你可以看看源码就知道了。实际上不能在线程中更新UI的原因,是因为 requestLayout 时会调用 checkThread 方法。而 TextView 会在 checkForRelayout 检测是否需要 requestLayout。你可以试试TextView高度设置为 WRAP_CONTENT ,然后在线程设置一大段文本,可以让他换行改变高度。就会触发 requestLayout 方法,此时就会导致崩溃
      

  3.   

    我又试了一下,子线程可以invalidate怎么回事,而且如果checkForRelayout判断不需要requestLayout的话就会走invalidate,但是为什么都说子线程不能invalidate啊
      

  4.   

    我又试了一下,子线程可以invalidate怎么回事,而且如果checkForRelayout判断不需要requestLayout的话就会走invalidate,但是为什么都说子线程不能invalidate啊
    自己去探寻一下嘛。。这就是一个学习的过程
      

  5.   

    我又试了一下,子线程可以invalidate怎么回事,而且如果checkForRelayout判断不需要requestLayout的话就会走invalidate,但是为什么都说子线程不能invalidate啊
    自己去探寻一下嘛。。这就是一个学习的过程
    androidstudio源码一片隐藏,调试起来很恶心,不过最后还是找到了。网上都view的invalidateInternal方法会调用父view的invalidateChild,然后一个do while循环父view不断找自己的父view,直到调用ViewRootImpl.invalidateChildInParent,在这里会检查当前线程。但是我用的小米手机不是这样的,在父view的invalidateChild会先检查一个硬件加速标志,然后就不断调用父view的onDescantInvalidated,直到到达ViewRootImpl.onDescntInvalidated调,。最后发现invalidate和requestLayout除了不检查线程,都是调用了scheduleTraversals。不知道是谁的功能用了个加速和网上说的调用过程不一样