已回收两次!TypedArray中的运行时异常。

3

我收到了一些来自使用 Android L 预览版的设备的崩溃报告,问题是:

Caused by: java.lang.RuntimeException: [17, ...... ] recycled twice!
       at android.content.res.TypedArray.recycle(TypedArray.java:869)

因为Android L还没有推出,所以我看不到代码,如何检查TypedArray是否已经被回收?

实际上我发现recycle方法被调用了两次,但是无论如何,为什么现在要抛出一个异常来破坏可能旧的工作代码呢(即使调用recycle两次是不正确的)。


1
你有注意到 TypedArray.recycle() 的文档变更了吗?它已经改为:"回收 TypedArray,以便稍后的调用者重新使用。调用此函数后,您绝不能再次触摸 typed array。" - harism
1个回答

9
由于 L 版本中 TypedArray 池的更改,调用 TypedArray.recycle() 两次或在 recycle() 后调用 TypedArray 的 getter 不安全。这从未是正确的应用程序行为,在 L 版本之前可能会引入微妙的错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接