تكرار السؤال: …
الإجابة المختصرة
تُستخدم Channel للاتصال من نقطة لنقطة وتوزيع المهام (Queue) حيث يستهلك القيمة مستقبل واحد فقط؛ بينما يُستخدم Flow لبث البيانات المتجددة (Streams) لمستمعين متعددين.
الشرح
تمثل الـ Channel قناة اتصال ساخنة (Hot Communication Pipeline) مناسبة لتمرير الأحداث الفردية التي يجب معالجتها مرة واحدة بدقة (مثل رغبات التنقل بين الشاشات أو إضافة عناصر لطابور إرسال). أما Flow فهو الخيار القياسي لتمثيل حالات الواجهة وتدفقات قواعد البيانات ومراقبة حالة الشبكة المستمرة.
مثال بالكود
val eventChannel = Channel<UiEffect>(Channel.BUFFERED)
// إرسال حدث فردي:
eventChannel.send(UiEffect.ShowToast("تم الحفظ بنجاح"))
// استهلاك الحدث مرة واحدة فقط:
val effect = eventChannel.receive()أخطاء شائعة
- استخدام Channel لإدارة حالة واجهة مستخدم (UI State)، لأنها تفقد قيمتها بمجرد استهلاكها من أول مراقب ولا تحتفظ بقيمة حالية ليعاد رسمها عند تدوير الشاشة.