Обработка ошибок Asynctask

Я использую AsyncTask для выполнения некоторых фоновых вычислений, но я не могу найти правильный способ обработки исключений. В настоящее время я использую следующий код:

 private class MyTask extends AsyncTask<String, Void, String> { private int e = 0; @Override protected String doInBackground(String... params) { try { URL url = new URL("http://www.example.com/"); } catch (MalformedURLException e) { e = 1; } // Other code here... return null; } @Override protected void onPostExecute(String result) { if (e == 1) Log.i("Some Tag", "An error occurred."); // Perform post processing here... } } 

Я считаю, что переменная e maye может быть записана / доступна как основным, так и рабочим потоком. Поскольку я знаю, что onPostExecute() будет запущен только после doInBackround() , могу ли я опустить любую синхронизацию?

Это плохой код? Есть ли согласованный или правильный способ обработки исключений в AsyncTask ?

Я делаю это в своих приложениях, я думаю, что нет лучшего способа.

Вы также можете прочитать ответ Марка Мерфи об этом.

Это гарантированно работает даже на архитектуре SMP. Вся синхронизация выполняется для вас. Однако было бы лучше использовать возвращаемое значение для этого.

Я думаю, что ваш код будет работать, но уже есть некоторая обработка ошибок, встроенная в класс AsyncTask .

Вы можете избежать использования дополнительной переменной с помощью метода cancel () и метода обработчика onCancelled () . Когда вы вызываете cancel в методе doInBackground (), метод onCancelled в потоке пользовательского интерфейса. Если вы вызываете cancel (true) или cancel (false), зависит от ваших потребностей.


 private class MyTask extends AsyncTask<String, Void, String> { @Override protected NewsItem doInBackground(String... params) { try { URL url = new URL("http://www.example.com/"); } catch (MalformedURLException e) { cancel(false/true); } // Other code here... return null; } @Override protected void onPostExecute(String result) { // Perform successful post processing here... } @Override protected void onCancelled() { super.onCancelled(); // Perform error post processing here... } } 
Intereting Posts
Как правильно маскировать Bitmap с помощью LinearGradient shader? Получите реальное разрешение экрана на сэндвич с мороженым Карты Google и приложения с картой имеют разные текущие позиции Как отправить KeyEvents через службу метода ввода в диалоговое окно или в меню Spinner? Правильное использование yieldIfContendedSafely () в многопоточном приложении Android Обработка исключений API в RxJava Как создать плагин stagefright Можно ли выборочно установить модули для компонентов в кинжале 2? Как запрашивать разрешения от службы в Android Marshmallow Разница между неявными и явными намерениями Как я могу выровнять меню / значки панели инструментов Android слева, как в приложении «Карты Google»? EditText, очистить фокус при касании снаружи Как изменить цвет фона вкладки при использовании TabLayout? Xamarin proguard.ParseException: Неизвестный параметр '' в строке 1 файла 'Свойства / proguard.cfg' Живет ли анонимный класс?