How to fix Android Cannot get a dirty matrix error?(如何修复Android无法获得脏矩阵错误?)
问题描述
使用软键盘时输出未知错误
A/OpenGLRenderer: Cannot get a dirty matrix!
A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 42843 (Thread-12), pid 15445
为什么会发生这样的错误?你怎么解决它?
推荐答案
不要在工作线程上调用view#getLocationOnScreen或view#getMatrix,
View#getLocationOnScreen或View#getMatrix会将变量‘mPrimitiveFields.mMatrixOrPivotDirty’重置为False并进行检查,如果为True,则崩溃;
许多在主线程上运行的API(如View#setScaleX/setScaleY/setAlpha)会将变量‘mPrimitiveFields.mMatrixOrPivotDirty’设置为True
因此,如果‘View#getLocationOnScreen或View#getMatrix’在工作线程上运行,则可能并发修改变量‘mPrimitiveFields.mMatrixOrPivotDirty’并导致崩溃
如果您想要更详细的分析,请访问以下地址: https://www.jianshu.com/p/d6d3bb641198http://androidxref.com/9.0.0_r3/xref/frameworks/base/core/jni/android_view_RenderNode.cpp http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/hwui/RenderProperties.h
查看#getLocationOnScreen或查看#getMatrix->; Android_view_RenderNode.cpp#android_view_RenderNode_getTransformMatrix->; static void android_view_RenderNode_getTransformMatrix(jlong renderNodePtr, jlong outMatrixPtr) {
RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
SkMatrix* outMatrix = reinterpret_cast<SkMatrix*>(outMatrixPtr);
// call updateMatrix to reset 'mPrimitiveFields.mMatrixOrPivotDirty' to false
renderNode->mutateStagingProperties().updateMatrix();
// check 'mPrimitiveFields.mMatrixOrPivotDirty', if true then crash
const SkMatrix* transformMatrix = renderNode->stagingProperties().getTransformMatrix();
if (transformMatrix) {
*outMatrix = *transformMatrix;
} else {
outMatrix->setIdentity();
}
}
const SkMatrix* getTransformMatrix() const {
LOG_ALWAYS_FATAL_IF(mPrimitiveFields.mMatrixOrPivotDirty, "Cannot get a dirty matrix!");
return mComputedFields.mTransformMatrix;
}
这篇关于如何修复Android无法获得脏矩阵错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何修复Android无法获得脏矩阵错误?
基础教程推荐
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01