如何在不阻止Android中数据库线程的情况下等待数据库数据

时间:2019-07-10 10:31:30

标签: android multithreading

我真的很喜欢在Java / Android SDK中处理线程有多么容易。最近,我开始使用Executors。这种方法:

app.executeDiskIO(() -> {
    repository.saveLocation(location);
});

在很多情况下都很好,但是当事情变得更加复杂时,它似乎有缺陷。

我正在谈论这种情况:

app.executeDiskIO(() -> {
    List<Restaurant> restaurants = repository.nearestRestaurants();

    app.executeNetworkIO(() -> {
        for(Restaurant restaurant : restaurants) {
            RestaurantMenu menu = menuProvider.downloadMenu(restaurant);

            runOnUiThread(() -> {
                menuView.update(menu);
            });
        }
    });
});

上面的代码与三个单独的线程一起工作,其中每个线程需要等待上一个线程完成,然后才能执行下一个线程。上面的方法有效,但是问题是diskIO线程被阻塞,直到networkIOUI线程也完成为止。

我不太喜欢“嵌套”线程的想法。我确信必须有某种方法可以使线程以非阻塞方式互相等待。如果适用,请随时引导我学习材料。 :-)

PS:我能够解决上面的问题,但是我知道的方法比创建“嵌套”线程所需的几行代码复杂得多。我的问题是是否有一些简单而优雅的方法来解决问题。

0 个答案:

没有答案