tgkill - встроенная ошибка на Android 8.0 Samsung S8
В последнее время я начал получать сбои на базе Android (сообщается в жизнях Google Play). Они происходят только на телефонах Samsung Galaxy S8 или S8+ с Android 8.
Согласно трассировке стека он связан с потоком визуализации пользовательского интерфейса. Однако я не знаю, как это исправить или даже где именно в приложении это происходит.
Любая идея, как узнать, где в приложении это происходит? И почему затрагивается только Galaxy S8 с Android 8? Благодарю.
backtrace:
#00 pc 0000000000071854 /system/lib64/libc.so (tgkill+8)
#01 pc 000000000001e058 /system/lib64/libc.so (abort+88)
#02 pc 0000000000008248 /system/lib64/liblog.so (__android_log_assert+328)
#03 pc 0000000000052430 /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread10EglManager11damageFrameERKNS1_5FrameERK6SkRect+320)
#04 pc 000000000004f9dc /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread14OpenGLPipeline4drawERKNS1_5FrameERK6SkRectS8_RKNS0_12FrameBuilder13LightGeometryEPNS0_16LayerUpdateQueueERKNS0_4RectEbRKNS0_15BakedOpRenderer9LightInfoERKNSt3__16vectorINS_2spINS0_10RenderNodeEEENSM_9allocatorISQ_EEEEPNS0_19FrameInfoVisualizerE+76)
#05 pc 000000000004d7e0 /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread13CanvasContext4drawEv+176)
#06 pc 00000000000511e8 /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread13DrawFrameTask3runEv+184)
#07 pc 0000000000058494 /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread12RenderThread10threadLoopEv+356)
#08 pc 0000000000011c58 /system/lib64/libutils.so (_ZN7android6Thread11_threadLoopEPv+280)
#09 pc 00000000000fd688 /system/lib64/libandroid_runtime.so (_ZN7android14AndroidRuntime15javaThreadShellEPv+136)
#10 pc 000000000006de44 /system/lib64/libc.so (_ZL15__pthread_startPv+36)
#11 pc 000000000001f9a4 /system/lib64/libc.so (__start_thread+68)
Ответы
Ответ 1
Эта проблема, по-видимому, ограничивается устройствами Samsung с Android 8.0, это некоторая ошибка в выборе текста и/или вводе текста и/или закрытии диалога, содержащего EditTexts и/или вращении экрана.
Кажется, что есть обходной путь. Создайте xml файл в папке res/drawable, определяющей пустую форму, следующим образом.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<!-- nothing -->
</shape>
В файле макета добавьте следующие атрибуты в EditTexts:
android:textSelectHandle="@drawable/empty"
android:textSelectHandleRight="@drawable/empty"
android:textSelectHandleLeft="@drawable/empty"
источник: Форум разработчиков Samsung для разработчиков Samsung Galaxy S8 libhwui.so
Ответ 2
Анализ LogCat
Это где ваш код сбоя EglManager.cpp:
void EglManager::damageFrame(const Frame& frame, const SkRect& dirty) {
#ifdef EGL_KHR_partial_update
if (EglExtensions.setDamage && mSwapBehavior == SwapBehavior::BufferAge) {
EGLint rects[4];
frame.map(dirty, rects);
if (!eglSetDamageRegionKHR(mEglDisplay, frame.mSurface, rects, 1)) {
LOG_ALWAYS_FATAL("Failed to set damage region on surface %p, error=%s",
(void*)frame.mSurface, egl_error_str());
}
}
#endif
}
Вызывается из SkiaOpenGLPipeline.cpp:
SkiaOpenGLPipeline::draw //method
mEglManager.damageFrame(frame, dirty);
Зачем?
Кажется, у вас может быть " Failed to set damage region on surface
", возможно, после onResume()
от screen rotation
или onPause()
в вашей Activity
. Смотрите исправление общих проблем с android-жизненным циклом
Исправления
Я начал получать этот сбой после обновления до Oreo
, каждый раз, когда я запускал свое приложение, с сообщением " Failed to set damage region on
surface
", за которым следовали все эти строки о libhwui.so
и EglManager
И оказалось, что для некоторых неясных причина, это было так или иначе вызвано совершенно не связанной проблемой в моем приложении (слишком много открытых файлов [забыл закрыть их]). После исправления этой ошибки больше не происходит сбоев в EglManager
. [ также обратите внимание, что сбои случаются только при включенном аппаратном ускорении ] Ссылка: issetracker.google.com {проблема 70259031}
См. Также: eglCreateWindowSurface {SO problem}, Ведение журнала, собственные аварийные сбои при аварийном завершении в консоли разработчика с oreo-8-1 {SO problem}, аппаратное ускорение, opengl, GLSurfaceView