Android 为什么在以前版本的后台线程中操作UI时不会引发异常?

Android 为什么在以前版本的后台线程中操作UI时不会引发异常?,android,multithreading,Android,Multithreading,几年前我们发布了一个android应用程序,在子线程中使用了View.setVisibility()方法。 在安卓O开发者预览版4之前,这几年一直没有问题。 当我在Android O Developer Preview 4上测试我们的应用程序时,我发现子线程中的View.setVisibility()会引发如下异常: android.view.ViewRootImpl$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。 我已经将此方法移动

几年前我们发布了一个android应用程序,在子线程中使用了View.setVisibility()方法。 在安卓O开发者预览版4之前,这几年一直没有问题。 当我在Android O Developer Preview 4上测试我们的应用程序时,我发现子线程中的View.setVisibility()会引发如下异常:

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

我已经将此方法移动到主线程并修复了此问题

但我的问题是:

  • 为什么在以前的版本中没有抛出异常(即使在Android O Developer Preview 1中也没有异常)

  • 安卓O的哪些变化导致了这个问题?我们应该向我们的客户解释,但我们在Android开发者的网站上找不到证据

  • 这是一个例外。它只是从来没有被可靠地扔过。无论如何,从后台线程访问UI元素总是错误的。您的代码不是线程安全的,并且它可能总是显示出未报告的细微错误。您应该修复代码。

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