1

我在用

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

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

Android 文档还指出:

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

链接到文档

所以我的问题是,异步执行会阻塞 ui 线程吗?我的观察是否属实。

谢谢

编辑

我正在使用这个库来抓取 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));
            };
4

1 回答 1

0

AsyncTask.execute 在 AsyncTask 线程上运行。只要你不调用 .get() (你不应该这样做)它是异步的。但是,您不需要使用 runOnUiThread 或使用它发布到处理程序 - AsyncTask 的全部意义在于 onPostExecute 在 UI 线程上运行 - 否则您只需使用线程。

于 2018-12-10T02:51:33.660 回答