Android / JAVA:异步函数调用以避免阻塞调用

时间:2018-12-15 06:28:21

标签: java android multithreading runnable blocking

在我的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,将由UI线程处理,但是,getHttpDynamicId()可能由于联网而花费很长时间。有时,UI线程被此功能阻止。

有没有简单的方法可以使用另一个线程来处理getHttpDynamicId()来避免GUI冻结?还是任何其他多线程方法来解决问题?

1 个答案:

答案 0 :(得分:1)

从Meow提供的链接中: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);
}