首页 文章

Async是否执行块ui线程?

提问于
浏览
1

我在用

AsyncTask.execute(() -> {...}

在我的应用程序中,并注意到此方法阻止了ui线程 . 我在执行体中有一些代码执行一些计算需要5到8秒,然后通过 runOnUiThread 将结果返回给ui . 但是看起来我曾经调用过具有Async.execute(..)的方法 . 阻止UI添加其他元素,直到此元素完成其计算并将结果返回给ui .

Android文档还指出:

必须从应用程序的主线程调用此方法 .

Link to docs

所以我的问题是,async执行阻止ui线程吗?我的观察是真的 .

谢谢

EDIT

我正在使用this library来刮掉TMDB数据

AsyncTask.execute(() -> {

            TmdbTvSeasons tmdbTvSeasons = new TmdbApi(apiKey).getTvSeasons();
            TvSeason season = tmdbTvSeasons.getSeason(
                    tmdbShowId,
                    seasonNumber,
                    "en",
                    TmdbTvSeasons.SeasonMethod.videos);

            listener.tvSeasonReceived(season);

        });

我的监听器然后将结果传递给ui以更新回收器视图:

tListener = t -> {
                tArray.add(t)
                jobHandler = new Handler(Looper.getMainLooper());
                jobHandler.post(() ->
                        adapter.notifyItemInserted(tArray.size() - 1));
            };

1 回答

  • 0

    AsyncTask.execute在AsyncTask线程上运行 . 只要你不调用.get()(你永远不应该这样做)它的异步 . 然而,你不需要使用runOnUiThread或张贴与它 - 一个处理程序的AsyncTask的整个观点是,onPostExecute上thread-否则你只使用一个线程的UI运行 .

相关问题