Для того, чтобы избежать шаблонов и обработки очень специфического SDK с настроенными транзакциями API, я бы попытался передать универсальный метод, который будет вызываться и выполняться асинхронно.
Я пытался использовать RxJava
, EventBus
и AsyncTask
.Однако всякий раз, когда он туда попадал, я всегда получал android.os.NetworkOnMainThreadException
.
. Я использовал interface
, который, очевидно, прекрасно работает, но мне было интересно, почему то же самое нельзя применить куниверсальный метод?Это потому, что я специально не отправляю весь объект в новый поток?
Если я отправлю экземпляр объекта, то, учитывая, что у каждого метода есть свое имя, вызывать его было бы неудобноконкретный метод (если имя не было передано как String, возможно?).
Код, который будет выполняться в новом потоке, будет представлять собой вариант следующего:
public <T> void invokeMethod(T item) throws InvocationTargetException, IllegalAccessException {
if (item instanceof Method) {
((Method) item).invoke(this, (Object[]) null);
}
}
Очевидно, что обычно методы выполняются правильно, когда я это делаю, но они всегда выполняются на main thread
.