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

У меня есть класс с суровыми методами, которые извлекают данные из базы данных 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 или нет.