一部のデバイスで Android アプリがクラッシュし、dispatchTouchEvent の実装内で NullPointerException が発生します。私のデバイスで実際にクラッシュが発生したことはありませんが、現場では 1 日に何度も発生しています。これは、自分の分析と Android デベロッパー コンソールの両方でクラッシュが発生しているためです。問題は、このクラッシュがどのように発生する可能性があるかを理解するのに苦労していることです. 関連するコードは次のとおりです (「CRASH HERE ->」によって NullPointerException がスローされるコード内の場所をマークしました)。
if (…)
{
...
}
else if (event != null)
{
if (event.getAction() == MotionEvent.ACTION_DOWN) {
motionStartX = event.getX();
motionStartY = event.getY();
}
else if (event.getAction() == MotionEvent.ACTION_UP)
{
...
if (...)
{
...
}
else if (event != null && event.getPointerCount() > 0 &&
/*** CRASH HERE -> ***/(Math.abs(motionStartX - event.getX()) > 5 ||
Math.abs(motionStartY - event.getY()) > 5))
{
...
}
}
}
私の理解では、NullPointerException がスローされる唯一の方法は if event
isですがnull
、そのすぐ上の行に、イベントにポインターがあるかどうか、さらにはevent
パラノイドチェックを追加しました。null
それでも、私はクラッシュしています。何かが足りない気がします。誰かがこれについて何か洞察を持っていますか?