Сбой только в Android 14 "[libinput.so] android::VelocityTracker::addMovement(long, int, int, float)"Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Сбой только в Android 14 "[libinput.so] android::VelocityTracker::addMovement(long, int, int, float)"

Сообщение Anonymous »

По данным консоли Google Play, следующий сбой происходит только на устройствах Android 14.

Код: Выделить всё

[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)
[![введите описание изображения здесь][1]][1]
Может ли кто-нибудь подсказать возможные причины?
Обновление [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;
});
Обновление от 01 января 2024 г.:
Этот сбой остается наиболее частым, даже несмотря на то, что устройства 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;
});
Хотя проблема была полностью решена за счет предотвращения обнаружения двойного касания таким способом, мне очень любопытно, почему этот код обнаружения двойного касания вызвал такую ​​​​чрезвычайно высокую воспринимаемую частоту сбоев, как сообщает Консоль Google Play только на устройствах Android 14.
[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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»