Android: избегайте сбоев приложения из-за необработанных ошибок - PullRequest
8 голосов
/ 27 мая 2011

В моем приложении для Android я попытался поместить блоки Try Catch во все возможные места. Однако я хочу избежать сбоя приложения из-за любых необработанных ошибок. Как мне этого добиться?

Я использовал Thread.setDefaultUncaughtExceptionHandler(handler);, но это только поможет мне получить данные о сбое, верно?

Ответы [ 5 ]

6 голосов
/ 24 сентября 2014

Вы можете использовать следующий способ:

public class MyApplication extends Application
{
  public void onCreate ()
  {
    // Setup handler for uncaught exceptions.
    Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler()
    {
      @Override
      public void uncaughtException (Thread thread, Throwable e)
      {
        handleUncaughtException (thread, e);
      }
    });
  }

 // here you can handle all unexpected crashes 
  public void handleUncaughtException (Thread thread, Throwable e)
  {
    e.printStackTrace(); // not all Android versions will print the stack trace automatically

    Intent intent = new Intent ();
    intent.setAction ("com.mydomain.SEND_LOG"); // see step 5.
    intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); // required when starting from Application
    startActivity (intent);

    System.exit(1); // kill off the crashed app
  }
}

, который будет обрабатывать непредвиденные сбои вашего приложения, взято из этого ответа .

2 голосов
/ 27 мая 2011

Предлагаю вам прочитать об ACRA здесь

2 голосов
/ 27 мая 2011

Почему вы хотите это сделать?

Если есть места, где вы можете поймать исключение и сделать что-то осмысленное, то есть вывести полезное предупреждение и затем продолжить работу приложения в согласованном и пригодном для использования состояниитогда ладно.

Если вы не можете предпринять каких-либо значимых действий, просто позвольте провалу произойти.Существует множество способов уведомления о возникающих сбоях, поэтому вы можете их исправить: например, посмотрите ACRA .Или консоль Android Developer теперь будет сообщать о сбое ваших приложений, распространяемых на Маркете.

0 голосов
/ 27 мая 2011
0 голосов
/ 27 мая 2011

Все ошибки и исключения происходят из Throwable. Поймав Throwable, можно справиться со всеми неожиданными условиями. Но ловить ошибки было бы бесполезно. Вы можете сделать что-нибудь в блоке catch перед сбоем приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...