Android / JAVA: вызов асинхронных функций, чтобы избежать блокировки вызовов - PullRequest
0 голосов
/ 15 декабря 2018

В моем приложении для Android есть функция с именем userProfile(Promise promise), которая выглядит примерно так:

@ReactMethod
public void userProfile(Promise promise) {
    String name = getName();
    String number = getNumber();
    String userDynamicId = getHttpDynamicId(); // network request
    ...
    promise.resolve(name + number + userDynamicId);
}

UserProfile - это ReactMethod, который будет обрабатываться потоком пользовательского интерфейса, однако getHttpDynamicId()может стоить много времени из-за сетей.Иногда поток пользовательского интерфейса блокируется этой функцией.

Есть ли простой способ использовать другой поток для обработки getHttpDynamicId(), чтобы избежать зависания графического интерфейса?Или любой другой многопоточный способ решения проблемы?

1 Ответ

0 голосов
/ 18 декабря 2018

По ссылке, предоставленной Мяу: https://developer.android.com/training/best-background. Мне удалось найти решение.

class MyCallable implements Callable<String> {
    @Override
    public String call() {
        String userDynamicId = "";
        try {
           // XXXXX Code to get ID
        } catch (Exception e) {
            console.error(e);
        }
        return userDynamicId;
    }
}

@ReactMethod
public void userProfile(Promise promise) {
    String name = getName();
    String number = getNumber();
    // instantiate MyCallable
    // Create executor and use Future to get the result from call()
    promise.resolve(name + number + userDynamicId);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...