【问题标题】:Android/JAVA: Async functions call to avoid blocking callsAndroid/JAVA:异步函数调用以避免阻塞调用
【发布时间】:2018-12-15 06:28:21
【问题描述】:

在我的 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 冻结?或者任何其他的多线程方式来处理这个问题?

【问题讨论】:

  • @MeowCat2012 感谢您提供的文件,它很有帮助。我正在看它。如果我能解决,我会在这里粘贴我的解决方案。如果是这样,请您帮忙竖起大拇指来抵消“-1”。看到人们如此轻易地无缘无故地给出“-1”,这令人难过。
  • 好吧,这次好了。您可以在提问之前学习search 以获取现有解决方案,并在将来浏览Documentation|Reference|Online Courses|Tutorials。不仅节省了别人的时间,也节省了自己的时间。然而,作为一个初学者,甚至很难知道从哪里开始搜索(例如使用什么关键字,如何描述),所以我认为投反对票并不合理。
  • @MeowCat2012 感谢您的理解以及链接。我已经设法解决了。稍后将上传我的解决方案。我很感激!

标签: java android multithreading runnable blocking


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多