Solución para Android SurfaceView touch lag

He terminado de programar un juego funcional de Android, pero no sé dónde mirar para solucionar el retraso de toque: En cualquier momento la pantalla se toca, el framerate cae por la mitad. Mi código es básicamente una copia y pega de LunarLander con un onTouchEvent.

Las búsquedas de Google me muestran soluciones básicas que dicen que funcionan pero no (durmiendo enTouchEvent, onDispatchEvent, onInterceptTouchEvent, sincronizado, etc.) y parece que es imposible usar SurfaceView sin inmenso retraso durante los eventos táctiles.

¿Que debería hacer? ¿Debo abandonar SurfaceView, desactivar onTouchEvent y utilizar un clickListener, de alguna manera bloquear las llamadas rápidas de contacto? Por favor, dime lo que está mal!

He intentado:

  • Hacer que onTouchEvent () no ejecute ningún código y devuelva false
  • Al dormir el onTouchEvent () o ejecutar () durante 16/32/1000 milisegundos, no hay diferencia
  • Anulación onDispatchevent () en lugar de onTouchEvent ()
  • Experimentando con synchronized () en onTouchEvent ()

Y aquí está mi código:

public class Surface extends SurfaceView implements SurfaceHolder.Callback { public CanvasThread canvasThread; private SurfaceHolder surfaceHolder; public Surface(Context context) { super(context); surfaceHolder = getHolder(); surfaceHolder.addCallback(this); setFocusable(true); } @Override public boolean onTouchEvent(MotionEvent event) { return canvasThread.touch(event); } class CanvasThread extends Thread { @Override public void run() { synchronized (this) { // game logic } } public boolean touch(MotionEvent event) { // touch logic } } } 

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.