Код: Выделить всё
[libinput.so] android::VelocityTracker::addMovement(long, int, int, float)
SIGSEGV
backtrace:
#00 pc 0x000000000006fa64 /system/lib64/libinput.so (android::VelocityTracker::addMovement(long, int, int, float)+444)
#01 pc 0x000000000007052c /system/lib64/libinput.so (android::VelocityTracker::addMovement(android::MotionEvent const*)+1284)
#02 pc 0x000000000020abd4 /system/framework/arm64/boot-framework.oat (art_jni_trampoline+132)
#03 pc 0x0000000000715084 /system/framework/arm64/boot-framework.oat (android.view.VelocityTracker.addMovement+68)
#04 pc 0x0000000000707754 /system/framework/arm64/boot-framework.oat (android.view.GestureDetector.onTouchEvent+660)
Может ли кто-нибудь подсказать возможные причины?
Обновление [2023-12-10]
Приложение использует ScaleGestureDetector. Ниже приведен соответствующий код. Весь код находится в блоках try-catch, которые я здесь для краткости опустил:
Код: Выделить всё
scaleGestureDetector = new ScaleGestureDetector(activity, new ScaleListener());
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(@NonNull ScaleGestureDetector detector) {
try {
float fScaleCurrent = detector.getScaleFactor();
if ((detector.getCurrentSpan() > (getResources().getDisplayMetrics().widthPixels + getResources().getDisplayMetrics().heightPixels))
&& (Math.abs(fScaleCurrent - 1) < 0.03)) {
} else {
_fScaleFactor *= fScaleCurrent;
}
} catch (Exception ex) {
}
return true;
}
}
_relativeLayoutCell.setOnTouchListener((v, event) -> {
MotionEvent eventCopy= MotionEvent.obtain(event);
gestureDetector.onTouchEvent(eventCopy);
return false;
});
Этот сбой остается наиболее частым, даже несмотря на то, что устройства Android 14 не даже среди пяти лучших API для установки приложений. Все сбои происходят на устройствах Samsung:
[![введите описание изображения здесь][2]][2]
Обновление [2024-01-09]
Наконец-то я увидел этот отчет о сбое для моделей OPPO и OnePlus. Однако подавляющее большинство сбоев происходит с устройств Samsung. Опять же, этот сбой наблюдается только на устройствах Android 14.
[![введите описание изображения здесь][3]][3]
Обновление [2024-07-08 ]
Показатель сбоев по мнению пользователей (процент активных пользователей в день, у которых произошел хотя бы один сбой по мнению пользователей) на Android 14 достиг 3,4 %, что более чем в три раза превышает порог плохого поведения ( 1,09%).
Наконец-то я нашел способ устранить эту проблему — удалив код для обнаружения двойного касания с помощью GestureDetector.
Я подумал, что следующий удаленный код для обнаружения двойного касания был стандартом учебника:
Код: Выделить всё
final GestureDetector gestureDetector = new GestureDetector(getActivity(), new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDoubleTap(@NonNull MotionEvent e) {
try {
//handle double-tap;
} catch (Exception ex) {
}
return true;
}
});
_relativeLayoutCell.setOnTouchListener((v, event) -> {
final MotionEvent eventCopy = MotionEvent.obtain(event);
executorService.execute(()->{
gestureDetector.onTouchEvent(eventCopy);
eventCopy.recycle();
});
return false;
});
[1]: https://i.sstatic.net/gRHcq.png
[2]: https://i.sstatic.net/jJ63t. png
[3]: https://i.sstatic.net/7eEEX.png
Подробнее здесь: https://stackoverflow.com/questions/776 ... ddmovement
Мобильная версия