کارفرما ازم میخواست برا اپلیکیشن فیلم و سریالش قسمت دانلود منیجر بزنم که کاربراش بتونن بصورت افلاین اونارو ببینن.
ازم میخواست دانلود منیجرش :
1 - یه قسمت برا نشون دادن دانلود های تکمیل شده داشته باشه
2 - یه قسمت برا نشون دادن دانلود هایی ک تموم نشده و کاربر بتونه هر زمان و با ورود به برنامه اون ها رو ببینه و وضعیتشون رو تغییر بده (مثلا بزنه یکی از دانلودا از جای قبلی ادامه پیدا کنه) داشته باشه
3 - قابلیت زمان بندی دانلود ها رو داشته باشه ( مثلا فیلم ها از ساعت 2 تا 8 صب خودکار دانلود شن)
4 - یه پلیر برا دانلود های تکمیل شده داشته باشه
5 - حتی در صورت بسته شدن برنامه به دانلود ادامه بده
و ریزه کاری های دیگه... خلاصه ی چی مثل ADM اما ساده و کلی تر
خب ...
برا پلیر که صدرصد Exoplayer
یه Foreground Service که دانلودا در صورت بسته شدن برنامه ادامه پیدا کنن
و یه دانلودر مثل Okhttp یا حتی امکانات خود جاوا
و یه دیتابیس برا ذخیره دانلود ها
میدونستم که پیاده سازی یه دیتابیس و یه دانلودر و ارتباطشون با هم خیلی وقت گیره و کلی ام تست لازم داره تا مطمئن کار کنه و خلاصه کسایی که تجربش رو دارن میدونن اونقد پیچیده هست که نشه با نوشتن سختیش رو نشون داد واس همین برای اینکه چرخ رو از نو اختراع نکنم دنبال یه کتابخونه گشتم.
چرا Fetch ؟
1 - اولین و بهترین دلیلیش از نظر من اینکه مدیریت دیتابیس فوق العاده داره و هر چیزی ینی هر چیزی که فکرشو بکنید میتونید به راحتی با دادن یه callback به fetch از دیتابیس دریافت کنید
2 - برای مدیریت دیتابیس از کتابخونه room استفاده میکنه و همین باعث میشه که کاملا همه چیز بدون باگ و مطمئن باشه
3 - شخصی سازی فوق العاده داره ینی هر قسمت دانلود منیجر برای مثال همین دیتابیس رو میتونید خودتون مدیریت کنید و یا ناتفیکیشن و حتی دانلودر (پیشفرض از خود امکانات jdk استفاده میکنه اما شما میتونید بهش okhttp رو بدید)
4 - برای هر وضعیت دانلود ناتفیکیشن اماده داره که برای سرویستون میتونید به راحتی ازش استفاده کنید
5 - قابلیت های دانلود کردنش انقد زیاده که نمیتونم همه رو بگم ولی مثلا یکیش قابلیت دانلود هم زمان چند task
6 - همه چیز همه رویدادها رو بتون گزارش میکنه و شما میتونید با register کردن یه listener از هر رویداد که داره اتفاق میفته با خبر باشید
7 - خیلی ساده و منطقیه
و کلی چیزای دیگه که خودتون اگه ازش استفاده کنید میتونید همینجوری تا خود صب ویژگی بنویسید :))
با Fetch من تجربه فوق العاده ای رو بدست آوردم و باعث شد من چندین برابر سریعتر کارم رو تحویل کارفرما بدم و اونقدی که من محو این کتابخونه شدم وظیفم دونستم این تجربه لذت بخش رو با شما به اشتراک بزارم و به جامعه برنامه نویسان همونجور که اونا به من کمک میکنن کمک کنم.
مرسی مرسی موفق باشید