Android обработка исключений лучшая практика?


Если мое приложение падает, оно зависает на пару секунд, прежде чем я скажу Android, что приложение разбилось и должно закрыться. Поэтому я думал о том, чтобы поймать все исключения в моем приложении с общим:

try {
    // ... 
} catch(Exception e) { 
    // ...
} 

и сделать новый Activity это объясняет, что приложение разбилось мгновенно (а также дает пользователям возможность отправлять почту с деталями ошибки), вместо того, чтобы иметь эту задержку благодаря Android. Есть ли лучшие методы достижения этого или это обескуражен?

обновление: я использую Nexus 5 с включенным искусством, и я не замечаю задержки, с которой я сталкивался с сбоями приложений ("висячие", о которых я говорил изначально). Я думаю, что, поскольку теперь все является машинным кодом, сбой происходит мгновенно вместе с получением всей информации о сбоях. Возможно, Nexus 5 просто быстрый :) несмотря на это, это не может быть проблемой в будущих версиях Android (учитывая, что ART будет по умолчанию в Android Л.)

3 66

3 ответа:

вот, проверьте на ссылка на ссылка.

здесь вы создаете класс say ExceptionHandler это implements java.lang.Thread.UncaughtExceptionHandler..

внутри этого класса вы будете делать свои спасательные вещи, такие как создание stacktrace и получение готового к загрузке отчета об ошибке и т. д....

теперь наступает важная часть т. е. Как поймать это исключение. Хотя это очень просто. Скопируйте следующую строку кода в каждом действии сразу после вызов супер метода в вашем переопределенном onCreate метод.

Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));

ваша деятельность может выглядеть так...

public class ForceClose extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));

        setContentView(R.layout.main);
    }
}

надеюсь, что это помогает...

вы можете просто использовать общий диалог оповещения для быстрого отображения сообщений об ошибках. Например...

//******************************************
//some generic method
//******************************************
private void doStuff()
{       
    try
    {
        //do some stuff here
    }
    catch(Exception e)
    {
        messageBox("doStuff", e.getMessage());
    }
}


//*********************************************************
//generic dialog, takes in the method name and error message
//*********************************************************
private void messageBox(String method, String message)
{
    Log.d("EXCEPTION: " + method,  message);

    AlertDialog.Builder messageBox = new AlertDialog.Builder(this);
    messageBox.setTitle(method);
    messageBox.setMessage(message);
    messageBox.setCancelable(false);
    messageBox.setNeutralButton("OK", null);
    messageBox.show();
}

вы также можете добавить в этот метод другие параметры обработки ошибок, такие как print stacktrace

Я нашел метод "wtf" (какой ужасный сбой) в классе Log. Из описания:

в зависимости от конфигурации системы, отчет может быть добавлена к DropBoxManager и/или процесс может быть немедленно прекращен с диалоговое окно с ошибкой.

http://developer.android.com/reference/android/util/Log.html

надеюсь, это поможет кому-то