Android обработка исключений лучшая практика?
Если мое приложение падает, оно зависает на пару секунд, прежде чем я скажу Android, что приложение разбилось и должно закрыться. Поэтому я думал о том, чтобы поймать все исключения в моем приложении с общим:
try {
// ...
} catch(Exception e) {
// ...
}
и сделать новый Activity
это объясняет, что приложение разбилось мгновенно (а также дает пользователям возможность отправлять почту с деталями ошибки), вместо того, чтобы иметь эту задержку благодаря Android. Есть ли лучшие методы достижения этого или это обескуражен?
обновление: я использую Nexus 5 с включенным искусством, и я не замечаю задержки, с которой я сталкивался с сбоями приложений ("висячие", о которых я говорил изначально). Я думаю, что, поскольку теперь все является машинным кодом, сбой происходит мгновенно вместе с получением всей информации о сбоях. Возможно, Nexus 5 просто быстрый :) несмотря на это, это не может быть проблемой в будущих версиях Android (учитывая, что ART будет по умолчанию в Android Л.)
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
надеюсь, это поможет кому-то