Они разные потоки и сбрасываются в разное время.
Если вы положите
System.out.flush();
System.err.flush();
внутри своего цикла, он будет работать как ожидалось.
Чтобы уточнить, выходные потоки кэшируются, поэтому вся запись поступает в этот буфер памяти. После периода молчания они фактически выписываются.
Вы пишете два буфера, затем после периода бездействия оба они покраснели (один за другим).
Очень полезный блог о Привязке данных: https://link.medium.com/HQY2VizKO1
class FragmentBinding<out T : ViewDataBinding>(
@LayoutRes private val resId: Int
) : ReadOnlyProperty<Fragment, T> {
private var binding: T? = null
override operator fun getValue(
thisRef: Fragment,
property: KProperty<*>
): T = binding ?: createBinding(thisRef).also { binding = it }
private fun createBinding(
activity: Fragment
): T = DataBindingUtil.inflate(LayoutInflater.from(activity.context),resId,null,true)
}
Объявляют привязку val как это во Фрагменте:
private val binding by FragmentBinding<FragmentLoginBinding>(R.layout.fragment_login)
не забывают писать это во фрагменте
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return binding.root
}