java - java.lang.IndexOutOfBoundsException:索引:2,大小:0
问题描述
当我从视图中绘制画布时,偶尔会发生此错误
val view: View = this.activity.getWindow().getDecorView().getRootView()
val bitmap = Bitmap.createBitmap(
view.width,
view.height,
Bitmap.Config.ARGB_8888
) // Bitmap()
val canvas = Canvas(bitmap)
view.draw(canvas) // trace brings me here
这是日志的其余部分
java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
at java.util.ArrayList.get(ArrayList.java:437)
at android.view.ViewGroup.getAndVerifyPreorderedView(ViewGroup.java:3624)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4110)
at android.view.View.draw(View.java:20075)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.view.View.draw(View.java:20075)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.view.View.draw(View.java:20075)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.view.View.draw(View.java:20075)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.view.View.draw(View.java:20075)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.view.View.draw(View.java:20210)
at com.android.internal.policy.DecorView.draw(DecorView.java:790)
解决方案
尝试从主线程调用你的函数 - 似乎已经为我修复了它。我认为问题是从主线程迭代视图层次结构,然后一些主线程调用者正在以某种方式修改视图层次结构,有时在迭代的同时。
如果你持有主线程,那么层次结构在你迭代它时不能被修改,所以你不会遇到这个问题。
推荐阅读
- django - Django admin,如何只触发一次功能?
- sql-server - 在单个事务中对不同连接进行并行查询
- sql-server - 模式匹配查询的性能调优
- python - 在python中删除纯文本以外的任何内容
- swift - CAGradient 图层上的模糊视图为灰色
- slack - 如何通过 Slack 获取用户的母语?
- google-cloud-platform - GCP 云函数 - 内存消耗
- bash - ImageMagick:如何从蒙版的每个区域获取像素?
- excel - 使用字符串变量作为单元格引用
- elm - elm 0.19 中的 innerHtml 属性的替代方法是什么?