Cả hai đều là luồng dữ liệu quan sát được, nhưng khác về khả năng và độ nhận biết vòng đời.
- LiveData: đơn giản, nhận biết lifecycle sẵn — chỉ phát dữ liệu khi observer ở trạng thái active, tự gỡ khi destroy → an toàn cho UI. Nhưng ít toán tử biến đổi, gắn với Android (khó test thuần).
- Flow: mạnh hơn — nhiều operator (
map,filter,combine), chạy trên coroutine/threading linh hoạt (flowOn), thuần Kotlin nên dễ test và dùng được ở tầng data.StateFlow/SharedFlowlà biến thể hot giữ giá trị hiện tại.
Thực hành hiện nay: dùng Flow ở tầng data/domain, thu thập an toàn ở UI bằng repeatOnLifecycle/collectAsStateWithLifecycle; StateFlow dần thay LiveData trong ViewModel.