puede utilizar un servicio (preferiblemente un servicio de primer plano) que escucha los registros (utilizando un hilo), y si hay un registro que indica el ANR, manejarlo.
He aquí una pequeña muestra de una aplicación que hace que la ANR:
...
findViewById(R.id.button).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(final View v)
{
try
{
Thread.sleep(10000);
}
catch(final InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
...
aquí es el registro que obtuve de la Logcat cuando llegué a la ANR:
08-03 13:02:37.746: E/ActivityManager(158): ANR in com.example.anr (com.example.anr/.MainActivity)
08-03 13:02:37.746: E/ActivityManager(158): Reason: keyDispatchingTimedOut
08-03 13:02:37.746: E/ActivityManager(158): Load: 6.19/2.37/0.86
08-03 13:02:37.746: E/ActivityManager(158): CPU usage from 5598ms to 0ms ago:
08-03 13:02:37.746: E/ActivityManager(158): 2.6% 158/system_server: 2.5% user + 0.1% kernel/faults: 86 minor
08-03 13:02:37.746: E/ActivityManager(158): 0.5% 298/com.android.phone: 0.3% user + 0.1% kernel/faults: 15 minor
08-03 13:02:37.746: E/ActivityManager(158): 0% 35/rild: 0% user + 0% kernel
08-03 13:02:37.746: E/ActivityManager(158): 4.6% TOTAL: 3.9% user + 0.6% kernel
08-03 13:02:37.746: E/ActivityManager(158): CPU usage from 2029ms to 2654ms later:
08-03 13:02:37.746: E/ActivityManager(158): 11% 158/system_server: 4.8% user + 6.4% kernel/faults: 2 minor
08-03 13:02:37.746: E/ActivityManager(158): 11% 192/InputDispatcher: 4.8% user + 6.4% kernel
08-03 13:02:37.746: E/ActivityManager(158): 1.6% 163/Compiler: 1.6% user + 0% kernel
08-03 13:02:37.746: E/ActivityManager(158): 1.6% 193/InputReader: 0% user + 1.6% kernel
08-03 13:02:37.746: E/ActivityManager(158): 18% TOTAL: 9.3% user + 9.3% kernel
Así que, sí, creo Es posible.
@WarrenFaith Dude. ¿De qué estás hablando? Acepto respuestas satisfactorias. Si alguien responde, pero en realidad no responde la pregunta, no los acepto. La mayoría de mis preguntas son * realmente * difíciles, o no tienen una respuesta. Por lo general, cuando pregunto, he buscado mucho, y si es una pregunta de Android, y no puedo encontrar la respuesta por mí mismo, va a ser una pregunta realmente complicada. Mi representante 2K es de responder preguntas. Si mi aplicación está en el mercado, puedo ver bloqueos. Sorpresa desagradable. Quiero atraparlos yo mismo. –
@WarrenFaith PS. Si puede decirme cómo atrapar ANR, lo prometo, su respuesta será aceptada. A juzgar por su "Si su aplicación está en el mercado ...", no sabes cómo, así que si respondes con eso, no lo" aceptaré ", porque no es la respuesta. ¿Verdad? ¿O se supone que debo aceptarlo solo porque lo escribiste? –
@WarrenFaith PPS , si tu respuesta es "no puedes hacer eso", necesitas citar una fuente con un enlace. De lo contrario, es solo una suposición. –