Intereting Posts
Сохранение данных на Android: хранение файлов и база данных SQLite против общих настроек Android: панель действий по умолчанию заполняется во время загрузки приложения Flip анимация в Android для настройки транзакции фрагмента «z» индекс или камера Android возвращается к первому действию при нажатии кнопки Как увидеть стек операций в отладке? Как правильно отклонить DialogFragment? Когда действительно используется пакет savedInstanceState? Как обновить галерею после удаления изображения с SDCard Поймать событие onTouch родителем, обработать его и передать детям Андроид, фон, список слоев и масштабируемый элемент растрового изображения Закрытая акция Android Twitter по умолчанию закрыта API 14 и 15 отсутствуют в Android Studio 2.0 AVD manager Поиск координат буквы, помещенной в TextView Есть ли способ открыть файл как объект File из папки ресурсов Android? ViewPager с фрагментами внутри PopupWindow (или DialogFragment) – ошибка не найдена для id для фрагмента

Как выбросить исключение, если метод выполняется из основного потока

У меня есть класс с суровыми методами, которые извлекают данные из базы данных sqlite. Я хотел бы «заставить» пользователей этого класса вызывать эти методы в потоке или в asynctask.

Как я могу предотвратить запуск метода в основном потоке?

Я хотел бы добиться чего-то похожего на android.os.NetworkOnMainThreadException, которое вы выбрали при попытке создать некоторую сеть в потоке ui.

Solutions Collecting From Web of "Как выбросить исключение, если метод выполняется из основного потока"

Сделайте что-то вроде:

if (Looper.myLooper() == Looper.getMainLooper()) { throw new DontDoThisOnUiThreadPleaseException(); } 

Источник: Looper.getMainLooper () и Looper.myLooper () .

Из библиотеки Google Volley:

  private void throwIfOnMainThread() { if (Looper.myLooper() == Looper.getMainLooper()) { throw new IllegalStateException("Must not be invoked from the main thread."); } } 
 if (Looper.getMainLooper().equals(Looper.myLooper())) { throw new MyException("Don't do it on the UI thread"); } 

Попробуйте это, он должен работать. Конечно, создайте свое собственное исключение или используйте существующее.

См. Документацию Looper, чтобы проверить, запущена ли вы в нити ui или нет.