我可以有多个线程张贴到UI同时?



我正在使用Java创建我的第一个Android应用程序。在onCreate中,我有许多方法来设置cardview的大小/位置,文本的大小,背景图像等。由于大量的前期工作,当我第一次打开应用程序时,它需要几秒钟才能加载。

我正在考虑将劳动分配给一些可以同时运行的后台线程,以加快应用程序的初始设置。然而,我可以有多个线程在同一时间运行,将在主UI上发布信息?

例如:我可以在onCreate上启动threadA, threadB和threadC——threadA在主UI上为210个textview分配文本的大小/颜色,threadB在主UI上分配20个cardview的长度/宽度,threadC在主UI上分配20个cardview的x/y位置。

同时从这么多后台线程向主UI提供这么多内容,我是不是在自找麻烦?比如死机/应用没有响应?这种方法会有问题吗?

UI (Main)线程是同步的。如果你有后台线程,数据应该在UI改变之前被发送到UI线程,此时所有调用都是同步的。如果你试图从主线程以外的线程更新UI元素,应用程序可能会崩溃/冻结。

下面是一个可运行线程设置后台线程到UI(主)线程的例子。请注意"应用程序"。变量是Context。研究Android View Model, LiveData和observer以获取其他示例。

if (application != null && object != null){
Handler mainHandler = new Handler(application.getMainLooper());
Runnable myRunnable = () -> {
tokenLiveData.setValue(object);
};
mainHandler.post(myRunnable);
}