为什么在以前的版本中在后台线程中操作UI时没有抛出异常?

时间:2017-09-06 05:24:22

标签: android multithreading

我们几年前发布了一个Android APP,并且在子线程中使用了一个View.setVisibility()方法。 直到Android O Developer Preview 4,这些年来一直没有问题。 当我在Android O Developer Preview 4上测试我们的APP时,我发现子线程中的View.setVisibility()会抛出异常,如下所示:

android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。

我已将此方法移至主线程并修复此问题。

但我的问题是:

  1. 为什么在以前的版本中没有抛出异常(在Android O Developer Preview 1中甚至没有例外)?

  2. Android O中的哪些变化会导致此问题?我们应该向客户解释,但我们无法在Android开发人员的网站上找到证据。

1 个答案:

答案 0 :(得分:2)

此异常was thrown in previous versions。它从来没有被可靠地抛出。无论如何,从后台线程访问UI元素总是错误的。您的代码不是线程安全的,并且它可能始终显示未报告的细微错误。你应该修改你的代码。