我在用
AsyncTask.execute(() -> {...}
在我的应用程序中,并注意到此方法阻止了ui线程 . 我在执行体中有一些代码执行一些计算需要5到8秒,然后通过 runOnUiThread
将结果返回给ui . 但是看起来我曾经调用过具有Async.execute(..)的方法 . 阻止UI添加其他元素,直到此元素完成其计算并将结果返回给ui .
Android文档还指出:
必须从应用程序的主线程调用此方法 .
所以我的问题是,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 回答
AsyncTask.execute在AsyncTask线程上运行 . 只要你不调用.get()(你永远不应该这样做)它的异步 . 然而,你不需要使用runOnUiThread或张贴与它 - 一个处理程序的AsyncTask的整个观点是,onPostExecute上thread-否则你只使用一个线程的UI运行 .