‫تفاوت بین commit و apply در sharePreference ؟

دستور commit بصورت synchronously عمل میکنه، یعنی تردی که این متد داخلش صدا زده شده بلاک میشه (ادامه کدها اجرا نمیشه) تا اینکه داده توی Disk ذخیره بشه و نتیجه که True و False هست برگرده.

اما دستور apply بصورت asynchronously عمل میکنه و توی background داده رو توی Disk ذخیره میکنه. اینکه ذخیره با موفقیت انجام شده یا مشکلی پیش اومده رو هم خبر نمیده. این async بودن کمک میکنه که از لحاظ پرفورمنسی بهتره باشه.

دو تا نکته هم دونستشن خوبه: ۱- احتمال داره متد apply صدا زده بشه و هنوز ذخیره سازی انجام نشده (به دلیل asyc بودنش این احتمال وجود داره)، اگر در این حین متد commitیی صدا زده بشه، باید تا اجرا شدن اون متد apply صبر کنه و بعد اجرا بشه.

۲- بعد صدا زدن apply خوندن بالافاصله داده‌ها هم مشکلی ایجاد نمیکنه. یعنی اگر هنوزم توی بک‌گراند متد اجرا نشده باشه و از یه متد getX برای گرفتن داده استفاده کنید، آخرین مقدارو میگیرید.