Android Studio 3.0-布局预览TimeoutException
已经有一段时间了,我的多个项目中的每个布局文件在第一次打开时都没有正确呈现。 AndroidStudio 3.0显示的异常为(完整堆栈跟踪):Android Studio 3.0-布局预览TimeoutException,android,android-layout,android-studio-3.0,android-fonts,timeoutexception,Android,Android Layout,Android Studio 3.0,Android Fonts,Timeoutexception,已经有一段时间了,我的多个项目中的每个布局文件在第一次打开时都没有正确呈现。 AndroidStudio 3.0显示的异常为(完整堆栈跟踪): java.util.concurrent.TimeoutException:预览在呈现布局时超时。 当其中一个自定义视图中存在无限循环或无限递归时,通常会发生这种情况。 位于org.kxml2.io.KXmlParser.next(未知源) 位于com.android.tools.idea.rendering.LayoutlibCallbackImpl$
java.util.concurrent.TimeoutException:预览在呈现布局时超时。
当其中一个自定义视图中存在无限循环或无限递归时,通常会发生这种情况。
位于org.kxml2.io.KXmlParser.next(未知源)
位于com.android.tools.idea.rendering.LayoutlibCallbackImpl$NamedParser.next(LayoutlibCallbackImpl.java:855)
位于com.android.layoutlib.bridge.android.BridgeXmlBlockParser.next(BridgeXmlBlockParser.java:302)
位于android.content.res.FontResourcesParser.skip(FontResourcesParser.java:220)
位于android.content.res.FontResourcesParser.readFamily(FontResourcesParser.java:154)
位于android.content.res.FontResourcesParser.readFamilies(FontResourcesParser.java:135)
位于android.content.res.FontResourcesParser.parse(FontResourcesParser.java:126)
位于com.android.layoutlib.bridge.impl.resourceheloper.getFont(resourceheloper.java:424)
位于com.android.layoutlib.bridge.impl.resourceheloper.getFont(resourceheloper.java:454)
位于android.content.res.BridgeTypedArray.getFont(BridgeTypedArray.java:735)
位于android.widget.TextView.readTextAppearance(TextView.java:3369)
在android.widget.TextView。(TextView.java:919)
位于android.widget.TextView。(TextView.java:832)
位于android.support.v7.widget.AppCompatTextView。(AppCompatTextView.java:75)
位于android.support.v7.widget.AppCompatTextView。(AppCompatTextView.java:71)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:423)
位于org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:481)
位于org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:252)
位于org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:215)
在com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadClass(LayoutlibCallbackImpl.java:218)上
在android.view.BridgeInflater.loadCustomView(BridgeInflater.java:336)中
在android.view.BridgeInflater.onCreateView(BridgeInflater.java:155)中
位于android.view.LayoutInflater.onCreateView(LayoutInflater.java:720)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:788)
在android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:225)中
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
位于android.view.LayoutInflater.rInflate_的原始版本(LayoutInflater.java:863)
在android.view.LayoutInflater\u Delegate.rInflate(LayoutInflater\u Delegate.java:72)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:837)
位于android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
位于android.view.LayoutInflater.rInflate_的原始版本(LayoutInflater.java:866)
在android.view.LayoutInflater\u Delegate.rInflate(LayoutInflater\u Delegate.java:72)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:837)
位于android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
位于android.view.LayoutInflater.rInflate_的原始版本(LayoutInflater.java:866)
在android.view.LayoutInflater\u Delegate.rInflate(LayoutInflater\u Delegate.java:72)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:837)
位于android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
在android.view.LayoutInflater.充气(LayoutInflater.java:515)
在android.view.LayoutInflater.inflate(LayoutInflater.java:394)
在com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:325)上
位于com.android.layoutlib.bridge.bridge.createSession(bridge.java:384)
位于com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:193)
位于com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:547)
在com.android.tools.idea.rendering.RenderTask.lambda$inflate$3(RenderTask.java:681)
位于com.android.tools.idea.rendering.RenderTask$$Lambda$2201/612657191.call(未知源)
在java.util.concurrent.FutureTask.run(FutureTask.java:266)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
运行(Thread.java:745)
由于找不到合适的解决方案,我决定把这个问题贴出来。
有人知道发生了什么吗
从stacktrace中,我发现这个问题与xml文件中的新字体管理有关。。。
我的项目是在新的api 26之前编写的,与其他许多开发人员一样,我使用了存储在assets文件夹中的自定义字体。我的布局仍然充满了“旧方式”。
相反,我正在使用更简单的“新方式”进行新布局,使用可下载字体声明fontFamily
属性。而且一切都很好
这种共存会是我的问题吗
找到的唯一解决方案是每次AndroidStudio时使无效并重新启动。
但肯定有另一种方式,以及发生这种情况的原因
编辑日期:11-29-2017
这一问题在两天前再次出现,现在,即使是唯一的解决方法(选项使缓存失效并重新启动)也不再有效
也许这几天也有同样的问题出现在其他人身上?
试图完全在黑暗中创建布局并不有趣……这是否会同时发生在两种布局(“旧方式”和“新方式”)中?当你说“失效并重新启动”时,你说的“我”是什么意思
java.util.concurrent.TimeoutException: Preview timed out while rendering the layout.
This typically happens when there is an infinite loop or unbounded recursion in one of the custom views.
at org.kxml2.io.KXmlParser.next(Unknown Source)
at com.android.tools.idea.rendering.LayoutlibCallbackImpl$NamedParser.next(LayoutlibCallbackImpl.java:855)
at com.android.layoutlib.bridge.android.BridgeXmlBlockParser.next(BridgeXmlBlockParser.java:302)
at android.content.res.FontResourcesParser.skip(FontResourcesParser.java:220)
at android.content.res.FontResourcesParser.readFamily(FontResourcesParser.java:154)
at android.content.res.FontResourcesParser.readFamilies(FontResourcesParser.java:135)
at android.content.res.FontResourcesParser.parse(FontResourcesParser.java:126)
at com.android.layoutlib.bridge.impl.ResourceHelper.getFont(ResourceHelper.java:424)
at com.android.layoutlib.bridge.impl.ResourceHelper.getFont(ResourceHelper.java:454)
at android.content.res.BridgeTypedArray.getFont(BridgeTypedArray.java:735)
at android.widget.TextView.readTextAppearance(TextView.java:3369)
at android.widget.TextView.<init>(TextView.java:919)
at android.widget.TextView.<init>(TextView.java:832)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:75)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:71)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:481)
at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:252)
at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:215)
at com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadClass(LayoutlibCallbackImpl.java:218)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:336)
at android.view.BridgeInflater.onCreateView(BridgeInflater.java:155)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:720)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:788)
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:225)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:863)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:837)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:866)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:837)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:866)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:837)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:325)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:384)
at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:193)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:547)
at com.android.tools.idea.rendering.RenderTask.lambda$inflate$3(RenderTask.java:681)
at com.android.tools.idea.rendering.RenderTask$$Lambda$2201/612657191.call(Unknown Source)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)