ื“ื™ ืžืขืฉื” ืคื•ืŸ ื•ื•ื™ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืื™ืŸ ืจืขืึทืœื ื•ื•ืึทืŸ ืื™ื‘ืขืจ ืึท ืœืึทื ื’ ืงืึทื˜ืขืจ

ื›ืœ ื™ื•ื–ืขืจื– ื ืขืžืขืŸ ืฉื ืขืœ ืงืึทื˜ืขืจ ืื•ืŸ ืึธืคึผืจื•ืคื™ืง ื•ื™ ืื™ืŸ ืจื™ืจืขื•ื•ื“ื™ืง ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืคึฟืึทืจ ื’ืขื’ืขื‘ืŸ. ืื•ื™ื‘ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื ืขืžื˜ ืึท ืœืึทื ื’ ืฆื™ื™ึทื˜ ืฆื• ืงืึทื˜ืขืจ, ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ื”ื™ื™ื‘ื˜ ืฆื• ืคื™ืœืŸ ื˜ืจื•ื™ืขืจื™ืง ืื•ืŸ ื‘ื™ื™ื–. ืื™ืจ ืงืขื ืขืŸ ืœื™ื™ื›ื˜ ืฆืขืœืึธื–ืŸ ื“ื™ ืงื•ื ื” ื“ืขืจืคืึทืจื•ื ื’ ืึธื“ืขืจ ื’ืึธืจ ืคืึทืจืœื™ืจืŸ ื“ืขื ื‘ืึทื ื™ืฆืขืจ ืืคื™ืœื• ืื™ื™ื“ืขืจ ืขืจ ืกื˜ืึทืจืฅ ื ื™ืฆืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ.

ืžื™ืจ ืึทืžืึธืœ ื“ื™ืกืงืึทื•ื•ืขืจื“ ืึทื– ื“ื™ ื“ืึธื“ืึธ ืคึผื™ืฆืึท ืึทืคึผ ื ืขืžื˜ 3 ืกืขืงื•ื ื“ืขืก ืฆื• ืงืึทื˜ืขืจ ืื™ืŸ ื“ื•ืจื›ืฉื ื™ื˜ืœืขืš, ืื•ืŸ ืคึฟืึทืจ ืขื˜ืœืขื›ืข "ืžืึทื–ืœื“ื™ืง ืึธื ืขืก" ืขืก ื ืขืžื˜ 15-20 ืกืขืงื•ื ื“ืขืก.

ื•ื ื˜ืขืจ ื“ืขืจ ืฉื ื™ื™ึทื“ืŸ ืื™ื– ืึท ื’ืขืฉื™ื›ื˜ืข ืžื™ื˜ ืึท ื’ืœื™ืงืœืขืš ืกืึธืฃ: ื•ื•ืขื’ืŸ ื“ืขื ื•ื•ื•ึผืงืก ืคื•ืŸ ื“ื™ ืจืขืึทืœื ื“ืึทื˜ืึทื‘ื™ื™ืก, ืึท ื–ื›ึผืจื•ืŸ ืจื™ื ืขืŸ, ื•ื•ื™ ืžื™ืจ ืึทืงื™ื•ืžื™ืึทืœื™ื™ื˜ื™ื“ ื ืขืกื˜ืขื“ ืึทื‘ื“ื–ืฉืขืงืฅ, ืื•ืŸ ื“ืขืžืึธืœื˜ ืคึผื•ืœื“ ื–ื™ืš ืฆื•ื–ืึทืžืขืŸ ืื•ืŸ ืคืึทืจืคืขืกื˜ื™ืงื˜ ืึทืœืฅ.

ื“ื™ ืžืขืฉื” ืคื•ืŸ ื•ื•ื™ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืื™ืŸ ืจืขืึทืœื ื•ื•ืึทืŸ ืื™ื‘ืขืจ ืึท ืœืึทื ื’ ืงืึทื˜ืขืจ

ื“ื™ ืžืขืฉื” ืคื•ืŸ ื•ื•ื™ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืื™ืŸ ืจืขืึทืœื ื•ื•ืึทืŸ ืื™ื‘ืขืจ ืึท ืœืึทื ื’ ืงืึทื˜ืขืจ
ืžื—ื‘ืจ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ: ืžืึทืงืกื™ื ืงืึทื˜ืฉื™ื ืงื™ืŸ - ืึทื ื“ืจื•ื™ื“ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ื‘ื™ื™ ื“ืึธื“ืึธ ืคึผื™ืฆืึท.

ื“ืจื™ื™ ืกืขืงื•ื ื“ืขืก ืคื•ืŸ ื’ืขื‘ืŸ ืึท ืงืœื™ืง ืื•ื™ืฃ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื™ื™ืงืึทืŸ ืฆื• ืื•ื™ืฃ ืจืขืกื•ืžืข () ืคื•ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ื˜ืขื˜ื™ืงื™ื™ื˜ ืื™ื– ื•ืžืขื ื“ื™ืงื™ื™ึทื˜. ืื•ืŸ ืคึฟืึทืจ ืขื˜ืœืขื›ืข ื™ื•ื–ืขืจื–, ื“ื™ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜ ืจื™ื˜ืฉื˜ 15-20 ืกืขืงื•ื ื“ืขืก. ื•ื•ื™ ืื™ื– ื“ืึธืก ืืคื™ืœื• ืžืขื’ืœืขืš?

ื ื–ื™ื™ืขืจ ืงื•ืจืฅ ืงื™ืฆืขืจ ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ืฆื™ื™ื˜ ืฆื• ืœื™ื™ืขื ืขืŸ
ืื•ื ื“ื–ืขืจ ืจืขืึทืœื ื“ืึทื˜ืึทื‘ื™ื™ืก ื’ืขื•ื•ืืงืกืŸ ืขื ื“ืœืึทืกืœื™. ืขื˜ืœืขื›ืข ื ืขืกื˜ืขื“ ืึทื‘ื“ื–ืฉืขืงืฅ ื–ืขื ืขืŸ ื ื™ืฉื˜ ืื•ื™ืกื’ืขืžืขืงื˜, ืึธื‘ืขืจ ื–ืขื ืขืŸ ืงืขืกื™ื™ื“ืขืจ ืึทืงื™ื•ืžื™ืึทืœื™ื™ื˜ื™ื“. ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜ ืื™ื– ื‘ื™ืกืœืขื›ื•ื•ื™ื™ึทื– ื’ืขื•ื•ืืงืกืŸ. ื“ืขืจื ืึธืš ืžื™ืจ ืคืึทืจืคืขืกื˜ื™ืงื˜ ืขืก, ืื•ืŸ ื“ื™ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜ ื’ืขืงื•ืžืขืŸ ืฆื• ื“ื™ ืฆื™ืœ - ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื•ื•ื™ื™ื ื™ืงืขืจ ื•ื•ื™ 1 ืจื’ืข ืื•ืŸ ื ื™ื˜ ืžืขืจ ื’ืขื•ื•ืืงืกืŸ. ื“ืขืจ ืึทืจื˜ื™ืงืœ ื›ึผื•ืœืœ ืึทืŸ ืึทื ืึทืœื™ืกื™ืก ืคื•ืŸ ื“ื™ ืกื™ื˜ื•ืึทืฆื™ืข ืื•ืŸ ืฆื•ื•ื™ื™ ืกืึทืœื•ืฉืึทื ื– - ืึท ืฉื ืขืœ ืื•ืŸ ืึท ื ืึธืจืžืึทืœ.

ื–ื•ื›ืŸ ืื•ืŸ ืึทื ืึทืœื™ืกื™ืก ืคื•ืŸ ื“ื™ ืคึผืจืึธื‘ืœืขื

ื”ื™ื™ึทื ื˜, ืงื™ื™ืŸ ืจื™ืจืขื•ื•ื“ื™ืง ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืžื•ื–ืŸ ืึธื ื”ื™ื™ื‘ืŸ ื’ืขืฉื•ื•ื™ื ื“ ืื•ืŸ ื–ื™ื™ืŸ ืึธืคึผืจื•ืคื™ืง. ืึธื‘ืขืจ ืขืก ืื™ื– ื ื™ืฉื˜ ื ืึธืจ ื•ื•ืขื’ืŸ ื“ื™ ืจื™ืจืขื•ื•ื“ื™ืง ืึทืคึผ. ื‘ืึทื ื™ืฆืขืจ ื“ืขืจืคืึทืจื•ื ื’ ืคื•ืŸ ื™ื ื˜ืขืจืึทืงืฉืึทืŸ ืžื™ื˜ ืึท ื“ื™ื ืกื˜ ืื•ืŸ ืึท ืคื™ืจืžืข ืื™ื– ืึท ืงืึธืžืคึผืœืขืงืก ื–ืึทืš. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, ืขืงืกืคึผืจืขืก ื’ื™ื›ืงื™ื™ึทื˜ ืื™ื– ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืฉืœื™ืกืœ ื™ื ื“ื™ืงืึทื˜ืึธืจืก ืคึฟืึทืจ ืคึผื™ืฆืึท ื“ื™ื ืกื˜. ืื•ื™ื‘ ื“ื™ ืขืงืกืคึผืจืขืก ืื™ื– ืฉื ืขืœ, ื“ื™ ืคึผื™ืฆืข ื•ื•ืขื˜ ื–ื™ื™ืŸ ื”ื™ื™ืก, ืื•ืŸ ื“ืขืจ ืงื•ื ื” ื•ื•ืืก ื•ื•ื™ืœ ืฆื• ืขืกืŸ ืื™ืฆื˜ ื•ื•ืขื˜ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ืฆื• ื•ื•ืึทืจื˜ืŸ ืœืึทื ื’. ืคึฟืึทืจ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ืื™ืŸ ืงืขืจ, ืขืก ืื™ื– ื•ื•ื™ื›ื˜ื™ืง ืฆื• ืžืึทื›ืŸ ืึท ื’ืขืคื™ืœ ืคื•ืŸ ืฉื ืขืœ ื“ื™ื ืกื˜, ื•ื•ื™ื™ึทืœ ืื•ื™ื‘ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื ืขืžื˜ ื‘ืœื•ื™ื– 20 ืกืขืงื•ื ื“ืขืก ืฆื• ืงืึทื˜ืขืจ, ื•ื•ื™ ืœืึทื ื’ ื•ื•ืขื˜ ืื™ืจ ื”ืึธื‘ืŸ ืฆื• ื•ื•ืึทืจื˜ืŸ ืคึฟืึทืจ ื“ื™ ืคึผื™ืฆืึท?

ืื™ืŸ ืขืจืฉื˜ืขืจ, ืžื™ืจ ื–ื™ืš ื–ืขื ืขืŸ ืคื™ื™ืกื˜ ืžื™ื˜ ื“ื™ ืคืึทืงื˜ ืึทื– ืžืืœ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื’ืขื ื•ืžืขืŸ ืึท ืคึผืึธืจ ืคื•ืŸ ืกืขืงื•ื ื“ืขืก ืฆื• ืงืึทื˜ืขืจ, ืื•ืŸ ื“ืขืžืึธืœื˜ ืžื™ืจ ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ื”ืขืจืŸ ื˜ืขื ื•ืช ืคื•ืŸ ืื ื“ืขืจืข ื—ื‘ืจื™ื ื•ื•ืขื’ืŸ ื•ื•ื™ ืœืึทื ื’ ืขืก ื’ืขื ื•ืžืขืŸ. ืื‘ืข ืจ ืžื™ ืจ ื”ืื‘ ืŸ ื ื™ืฉ ื˜ ื’ืขืงืขื  ื˜ ืื™ื‘ืขืจื—ื–ืจ ืŸ ื“ืข ื ืžืฆื‘ .

ื•ื•ื™ ืœืึทื ื’ ืื™ื– ืขืก? ืœื•ื™ื˜ Google ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸืื•ื™ื‘ ืึท ืงืึทืœื˜ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื ืขืžื˜ ื•ื•ื™ื™ื ื™ืงืขืจ ื•ื•ื™ 5 ืกืขืงื•ื ื“ืขืก, ื“ืึธืก ืื™ื– ื’ืขื”ืืœื˜ืŸ "ื•ื•ื™ ื ืึธืจืžืึทืœ". Dodo Pizza Android ืึทืคึผ ืื™ื– ืœืึธื ื˜ืฉื˜ (ืœื•ื™ื˜ Firebase ืžืขื˜ืจื™ืงืก _ืึทืคึผ_ืกื˜ืึทืจื˜) ื‘ื™ื™ ืงืึทืœื˜ ืึธื ื”ื™ื™ื‘ ืื™ืŸ ื“ื•ืจื›ืฉื ื™ื˜ืœืขืš ืื™ืŸ 3 ืกืขืงื•ื ื“ืขืก - "ื ื™ื˜ ื’ืจื•ื™ืก, ื ื™ื˜ ืฉืจืขืงืœืขืš," ื•ื•ื™ ื–ื™ื™ ื–ืึธื’ืŸ.

ืื‘ืขืจ ื“ืขืžืึธืœื˜ ืงืœื™ื™ืžื– ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ื“ืขืจืฉื™ื™ึทื ืขืŸ ืึทื– ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื’ืขื ื•ืžืขืŸ ืึท ื–ื™ื™ืขืจ, ื–ื™ื™ืขืจ, ื–ื™ื™ืขืจ ืœืึทื ื’ ืฆื™ื™ึทื˜ ืฆื• ืงืึทื˜ืขืจ! ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ืžื™ื˜, ืžื™ืจ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืžืขืกื˜ืŸ ื•ื•ืึธืก ืื™ื– "ื–ื™ื™ืขืจ, ื–ื™ื™ืขืจ, ื–ื™ื™ืขืจ ืœืึทื ื’". ืื•ืŸ ืžื™ืจ ื’ืขื•ื•ื™ื™ื ื˜ Firebase ืฉืคึผื•ืจ ืคึฟืึทืจ ื“ืขื ืึทืคึผ ืึธื ื”ื™ื™ื‘ ืฉืคึผื•ืจ.

ื“ื™ ืžืขืฉื” ืคื•ืŸ ื•ื•ื™ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืื™ืŸ ืจืขืึทืœื ื•ื•ืึทืŸ ืื™ื‘ืขืจ ืึท ืœืึทื ื’ ืงืึทื˜ืขืจ

ื“ืขืจ ื ืึธืจืžืึทืœ ืฉืคึผื•ืจ ืžืขืกื˜ืŸ ื“ื™ ืฆื™ื™ื˜ ืฆื•ื•ื™ืฉืŸ ื“ืขื ืžืึธืžืขื ื˜ ื•ื•ืขืŸ ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืขืคึฟื ื˜ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ืŸ ื“ืขื ืžืึธืžืขื ื˜ ื•ื•ืขืŸ ื“ื™ onResume () ืคื•ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ื˜ืขื˜ื™ืงื™ื™ื˜ ืื™ื– ืขืงืกืึทืงื™ื•ื˜ืึทื“. ืื™ืŸ ื“ื™ Firebase ืงืึทื ืกืึธื•ืœ, ื“ืขื ืžืขื˜ืจื™ืง ืื™ื– ื’ืขืจื•ืคืŸ _app_start. ืขืก ื”ืึธื˜ ื–ื™ืš ืึทืจื•ื™ืกื’ืขื•ื•ื™ื–ืŸ ืึทื–:

  • ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜ ืคึฟืึทืจ ื™ื•ื–ืขืจื– ื”ืขื›ืขืจ ื“ื™ 95 ืคึผืขืจืกืขื ื˜ื™ืœ ื–ืขื ืขืŸ ืงื™ืžืึทื˜ 20 ืกืขืงื•ื ื“ืขืก (ืขื˜ืœืขื›ืข ืืคื™ืœื• ืžืขืจ), ื˜ืจืึธืฅ ื“ื™ ื“ื•ืจื›ืฉื ื™ื˜ืœืขืš ืงืึทืœื˜ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜ ืื™ื– ื•ื•ื™ื™ื ื™ืงืขืจ ื•ื•ื™ 5 ืกืขืงื•ื ื“ืขืก.
  • ื“ื™ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜ ืื™ื– ื ื™ืฉื˜ ืึท ืงืขืกื™ื™ื“ืขืจื“ื™ืง ื•ื•ืขืจื˜, ืึธื‘ืขืจ ื•ื•ืืงืกื˜ ืื™ื‘ืขืจ ืฆื™ื™ึทื˜. ืื‘ืขืจ ืžืืœ ืขืก ื–ืขื ืขืŸ ื˜ืจืืคื ืก. ืžื™ืจ ื’ืขืคึฟื•ื ืขืŸ ื“ืขื ืžื•ืกื˜ืขืจ ื•ื•ืขืŸ ืžื™ืจ ื’ืขื•ื•ืืงืกืŸ ื“ื™ ื•ื•ืึธื’ ืคื•ืŸ ืึทื ืึทืœื™ืกื™ืก ืฆื• 90 ื˜ืขื’.

ื“ื™ ืžืขืฉื” ืคื•ืŸ ื•ื•ื™ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืื™ืŸ ืจืขืึทืœื ื•ื•ืึทืŸ ืื™ื‘ืขืจ ืึท ืœืึทื ื’ ืงืึทื˜ืขืจ

ืฆื•ื•ื™ื™ ื’ืขื“ืื ืงืขืŸ ื–ืขื ืขืŸ ื’ืขืงื•ืžืขืŸ ืฆื• ืžื™ื™ื ื•ื ื’:

  1. ืขืคึผืขืก ืœื™ืง.
  2. ื“ืขื "ืขืคึผืขืก" ืื™ื– ื‘ืึทืฉื˜ืขื˜ื™ืง ื ืึธืš ืžืขืœื“ื•ื ื’ ืื•ืŸ ื“ืขืžืึธืœื˜ ืœื™ืงืก ื•ื•ื™ื“ืขืจ.

"ืžื™ืกื˜ืึธืžืข ืขืคึผืขืก ืžื™ื˜ ื“ื™ ื“ืึทื˜ืึทื‘ืึทืกืข," ืžื™ืจ ื’ืขื“ืึทื ืง, ืื•ืŸ ืžื™ืจ ื”ืึธื‘ืŸ ืจืขื›ื˜. ืขืจืฉื˜ืขืจ, ืžื™ืจ ื ื•ืฆืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ื™ ืึท ืงืึทืฉ ื‘ืขืฉืึทืก ืžื™ื’ืจืึทื˜ื™ืึธืŸ, ืžื™ืจ ื•ื™ืกืžืขืงืŸ ืขืก. ืฆื•ื•ื™ื™ื˜ื ืก, ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ื– ืœืึธื•ื“ื™ื“ ื•ื•ืขืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืกื˜ืึทืจืฅ. ืึทืœืฅ ืคึผืึทืกื˜ ืฆื•ื–ืึทืžืขืŸ.

ื•ื•ืึธืก ืื™ื– ืคืึทืœืฉ ืžื™ื˜ ื“ื™ ืจืขืึทืœื ื“ืึทื˜ืึทื‘ื™ื™ืก

ืžื™ืจ ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื•ื•ื™ ื“ื™ ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืขื ื“ืขืจื•ื ื’ืขืŸ ืื™ื‘ืขืจ ื“ื™ ืœืขื‘ืŸ ืคื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ืคึฟื•ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ืื•ืŸ ื•ื•ื™ื™ึทื˜ืขืจ ื‘ืขืฉืึทืก ืึทืงื˜ื™ื•ื• ื ื•ืฆืŸ. ืื™ืจ ืงืขื ื˜ ื–ืขืŸ ื“ื™ ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ื“ื™ ืจืขืึทืœื ื“ืึทื˜ืึทื‘ื™ื™ืก ื“ื•ืจืš ืกื˜ืขื˜ื”ืึธ ืึธื“ืขืจ ืื™ืŸ ืžืขืจ ื“ืขื˜ืึทืœ ืื•ืŸ ืงืœืืจ ื“ื•ืจืš ืขืคืŸ ื“ื™ ื˜ืขืงืข ื“ื•ืจืš ืจืขืึทืœื ืกื˜ื•ื“ื™ืึธ. ืฆื• ื–ืขืŸ ื“ื™ ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ื“ื•ืจืš ADB, ื ืึธื›ืžืึทื›ืŸ ื“ื™ ืจืขืึทืœื ื“ืึทื˜ืึทื‘ื™ื™ืก ื˜ืขืงืข:

adb exec-out run-as ${PACKAGE_NAME} cat files/${DB_NAME}

ื’ืขืงื•ืงื˜ ืื•ื™ืฃ ื“ื™ ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืฆื™ื™ื˜, ืžื™ืจ ื’ืขืคึฟื•ื ืขืŸ ืึทื– ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืึทื‘ื“ื–ืฉืขืงืฅ ืคื•ืŸ ืึท ื–ื™ื›ืขืจ ื˜ื™ืคึผ ืื™ื– ืงืขืกื™ื™ื“ืขืจ ื™ื ืงืจื™ืกื™ื ื’.

ื“ื™ ืžืขืฉื” ืคื•ืŸ ื•ื•ื™ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืื™ืŸ ืจืขืึทืœื ื•ื•ืึทืŸ ืื™ื‘ืขืจ ืึท ืœืึทื ื’ ืงืึทื˜ืขืจ
ื“ื™ ื‘ื™ืœื“ ื•ื•ื™ื™ื–ื˜ ืึท ืคืจืึทื’ืžืขื ื˜ ืคื•ืŸ ืจืขืึทืœื ืกื˜ื•ื“ื™ืึธ ืคึฟืึทืจ ืฆื•ื•ื™ื™ ื˜ืขืงืขืก: ืื•ื™ืฃ ื“ื™ ืœื™ื ืงืก - ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื‘ืึทื–ืข ืขื˜ืœืขื›ืข ืžืึธืœ ื ืึธืš ื™ื ืกื˜ืึทืœื™ืจื•ื ื’, ืื•ื™ืฃ ื“ื™ ืจืขื›ื˜ - ื ืึธืš ืึทืงื˜ื™ื•ื• ื ื•ืฆืŸ. ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื–ืขืŸ ืึทื– ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืึทื‘ื“ื–ืฉืขืงืก ImageEntity ะธ MoneyType ืื™ื– ื‘ืื˜ื™ื™ื˜ื™ืง ื’ืขื•ื•ืืงืกืŸ (ื“ื™ ืกืงืจืขืขื ืฉืึธื˜ ื•ื•ื™ื™ื–ื˜ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืึทื‘ื“ื–ืฉืขืงืฅ ืคื•ืŸ ื™ืขื“ืขืจ ื˜ื™ืคึผ).

ืฉื™ื™ื›ื•ืช ืฆื•ื•ื™ืฉืŸ ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ื•ึผืงืก ืื•ืŸ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜

ืึทื ืงืึทื ื˜ืจืึธื•ืœื“ ื“ืึทื˜ืึทื‘ื™ื™ืก ื’ืจืึธื•ื˜ ืื™ื– ื–ื™ื™ืขืจ ืฉืœืขื›ื˜. ืึธื‘ืขืจ ื•ื•ื™ ืงืขืŸ ื“ืึธืก ื•ื•ื™ืจืงืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜? ืขืก ืื™ื– ื’ืึทื ืฅ ื’ืจื™ื ื’ ืฆื• ืžืขืกื˜ืŸ ื“ืขื ื“ื•ืจืš ื“ื™ ืึทืงื˜ื™ื•ื•ื™ื˜ื™ ืžืึทื ืึทื’ืขืจ. ื–ื™ื ื˜ ืึทื ื“ืจื•ื™ื“ 4.4, ืœืึธื’ืงืึทื˜ ื“ื™ืกืคึผืœื™ื™ื– ื“ื™ ืงืœืึธืฅ ืžื™ื˜ ื“ื™ ืฉื˜ืจื™ืงืœ ื’ืขื•ื•ื™ื–ืŸ ืื•ืŸ ื“ื™ ืฆื™ื™ื˜. ื“ื™ ืฆื™ื™ื˜ ืื™ื– ื’ืœื™ื™ึทืš ืฆื• ื“ื™ ืžืขื”ืึทืœืขืš ืคึฟื•ืŸ ื“ืขื ืžืึธืžืขื ื˜ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ืœืึธื ื˜ืฉื˜ ื‘ื™ื– ื“ืขื ืกื•ืฃ ืคื•ืŸ ื“ื™ ืจืขื ื“ืขืจื™ื ื’ ืคื•ืŸ ื“ื™ ื˜ืขื˜ื™ืงื™ื™ื˜. ื‘ืขืฉืึทืก ื“ืขื ืžืึธืœ ื“ื™ ืคืืœื’ืขื ื“ืข ื’ืขืฉืขืขื ื™ืฉืŸ ืคึผืึทืกื™ืจืŸ:

  • ืึธื ื”ื™ื™ื‘ืŸ ื“ืขื ืคึผืจืึธืฆืขืก.
  • ื™ื ื™ื˜ื™ืึทืœื™ื–ืึทื˜ื™ืึธืŸ ืคื•ืŸ ืึทื‘ื“ื–ืฉืขืงืฅ.
  • ืฉืึทืคื•ื ื’ ืื•ืŸ ื™ื ื™ื˜ื™ืึทืœื™ื–ื™ื™ืฉืึทืŸ ืคื•ืŸ ืึทืงื˜ื™ื•ื•ื™ื˜ืขื˜ืŸ.
  • ืฉืืคืŸ ืึท ืื•ื™ืกืœื™ื™ื’.
  • ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ ืจืขื ื“ืขืจื™ื ื’.

ืกื•ืฅ ืื•ื ื“ื–. ืื•ื™ื‘ ืื™ืจ ืœื•ื™ืคืŸ ADB ืžื™ื˜ ื“ื™ -S ืื•ืŸ -W ืคืœืึทื’ืก, ืื™ืจ ืงืขื ืขืŸ ื‘ืึทืงื•ืžืขืŸ ืขืงืกื˜ืขื ื“ืขื“ ืจืขื–ื•ืœื˜ืึทื˜ ืžื™ื˜ ื“ื™ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜:

adb shell am start -S -W ru.dodopizza.app/.MainActivity -c android.intent.category.LAUNCHER -a android.intent.action.MAIN

ืื•ื™ื‘ ืื™ืจ ื›ืึทืคึผืŸ ืขืก ืคื•ืŸ ื“ืึธืจื˜ grep -i WaitTime ืฆื™ื™ื˜, ืื™ืจ ืงืขื ืขืŸ ืึธื˜ืึทืžื™ื™ื˜ ื“ื™ ื–ืึทืžืœื•ื ื’ ืคื•ืŸ ื“ืขื ืžืขื˜ืจื™ืง ืื•ืŸ ื•ื•ื™ื–ืฉื•ื•ืึทืœื™ ืงื•ืง ืื™ืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ืŸ. ื“ื™ ื’ืจืึทืคื™ืง ืื•ื ื˜ืŸ ื•ื•ื™ื™ื–ื˜ ื“ื™ ืึธืคืขื ื’ื™ืงื™ื™ึทื˜ ืคื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜ ืื•ื™ืฃ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืงืึทืœื˜ ืกื˜ืึทืจืฅ ืคื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ.

ื“ื™ ืžืขืฉื” ืคื•ืŸ ื•ื•ื™ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืื™ืŸ ืจืขืึทืœื ื•ื•ืึทืŸ ืื™ื‘ืขืจ ืึท ืœืึทื ื’ ืงืึทื˜ืขืจ

ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜, ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื“ื™ ื–ืขืœื‘ืข ื ืึทื˜ื•ืจ ืคื•ืŸ ื“ื™ ืฉื™ื™ื›ื•ืช ืฆื•ื•ื™ืฉืŸ ื“ื™ ื’ืจื™ื™ืก ืื•ืŸ ื•ื•ื•ึผืงืก ืคื•ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก, ื•ื•ืึธืก ืื™ื– ื’ืขื•ื•ืืงืกืŸ ืคื•ืŸ 4 ืžื‘ ืฆื• 15 ืžื‘. ืื™ืŸ ื’ืึทื ืฅ, ืขืก ื˜ื•ืจื ืก ืื•ื™ืก ืึทื– ืžื™ื˜ ื“ื™ ืฆื™ื™ื˜ (ืžื™ื˜ ื“ืขื ื•ื•ื•ึผืงืก ืคื•ืŸ ืงืึทืœื˜ ืกื˜ืึทืจืฅ), ื‘ื™ื™ื“ืข ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืึทื˜ืขืจ ืฆื™ื™ื˜ ืื•ืŸ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ื’ืขื•ื•ืืงืกืŸ. ืžื™ืจ ื”ืึธื‘ืŸ ืึท ื›ื™ื™ืคึผืึทื˜ืึทืกืึทืก ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ื”ืขื ื˜. ืื™ืฆ ื˜ ืื™ ื– ื ื ืจ ื’ืขื‘ืœื™ื‘ ืŸ ืฆ ื• ื‘ืืฉื˜ืขื˜ื™ืง ืŸ ื“ ื™ ืืคื”ืขื ื’ื™ืงืฒื˜ . ื“ืขืจื™ื‘ืขืจ, ืžื™ืจ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ื‘ืึทื–ื™ื™ึทื˜ื™ืงืŸ ื“ื™ "ืœื™ืงืก" ืื•ืŸ ื–ืขืŸ ืื•ื™ื‘ ื“ืึธืก ื•ื•ืึธืœื˜ ืคืึทืจื’ื™ื›ืขืจืŸ ื“ื™ ืงืึทื˜ืขืจ.

ืกื™ื‘ื•ืช ืคึฟืึทืจ ืกืึธืฃ ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ื•ึผืงืก

ืื™ื™ื“ืขืจ ืจื™ืžื•ื•ื•ื™ื ื’ "ืœื™ืงืก", ืขืก ืื™ื– ื•ื•ืขืจื˜ ืคืืจืฉื˜ืื ื“ ื•ื•ืึธืก ื–ื™ื™ ืืจื•ื™ืก ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืึธืจื˜. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืœืึธื–ืŸ ืื•ื ื“ื– ื’ืขื“ืขื ืงืขืŸ ื•ื•ืึธืก ืจืขืึทืœื ืื™ื–.

ืจืขืึทืœื ืื™ื– ืึท ื ื™ื˜-ืจื™ืœื™ื™ืฉืึทื ืึทืœ ื“ืึทื˜ืึทื‘ื™ื™ืก. ืขืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื‘ืืฆื™ื•ื ื’ืขืŸ ืฆื•ื•ื™ืฉืŸ ืึทื‘ื“ื–ืฉืขืงืฅ ืื™ืŸ ืึท ืขื ืœืขืš ื•ื•ืขื’ ืฆื• ื•ื•ื™ ืคื™ืœืข ORM ืจื™ืœื™ื™ืฉืึทื ืึทืœ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ืื•ื™ืฃ ืึทื ื“ืจื•ื™ื“ ื–ืขื ืขืŸ ื“ื™ืกืงืจื™ื™ื‘ื“. ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜, ืจืขืึทืœื ืกื˜ืึธืจื– ืึทื‘ื“ื–ืฉืขืงืฅ ื’ืœื™ื™ืš ืื™ืŸ ื–ื›ึผืจื•ืŸ ืžื™ื˜ ื“ื™ ืžื™ื ื“ืกื˜ืขืจ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื˜ืจืึทื ืกืคืึธืจืžื™ื™ืฉืึทื ื– ืื•ืŸ ืžืึทืคึผื™ื ื’ื–. ื“ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืœื™ื™ืขื ืขืŸ ื“ืึทื˜ืŸ ืคื•ืŸ ื“ื™ ื“ื™ืกืง ื–ื™ื™ืขืจ ื’ืขืฉื•ื•ื™ื ื“, ื•ื•ืึธืก ืื™ื– ื“ื™ ืฉื˜ืึทืจืงื™ื™ื˜ ืคื•ืŸ ืจืขืึทืœื ืื•ืŸ ื•ื•ืึธืก ืขืก ืื™ื– ืœื™ื‘ ื’ืขื”ืื˜.

(ืคึฟืึทืจ ื“ื™ ืฆื•ื•ืขืงืŸ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ื“ื™ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื ื•ื’ ืคึฟืึทืจ ืื•ื ื“ื–. ืื™ืจ ืงืขื ืขืŸ ืœื™ื™ืขื ืขืŸ ืžืขืจ ื•ื•ืขื’ืŸ ืจืขืึทืœื ืื™ืŸ ื“ื™ ืงื™ืœ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืึธื“ืขืจ ืื™ืŸ ื–ื™ื™ืขืจ ืึทืงืึทื“ืขืžื™ืข).

ืคื™ืœืข ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื–ืขื ืขืŸ ืฆื•ื’ืขื•ื•ื•ื™ื ื˜ ืฆื• ืึทืจื‘ืขื˜ืŸ ืžืขืจ ืžื™ื˜ ืจื™ืœื™ื™ืฉืึทื ืึทืœ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– (ืœืžืฉืœ, ORM ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ืžื™ื˜ SQL ืื•ื ื˜ืขืจ ื“ื™ ืงืึทืคึผื˜ืขืจ). ืื•ืŸ ื˜ื™ื ื’ื– ื•ื•ื™ ืงืึทืกืงื™ื™ื“ื™ื ื’ ื“ืึทื˜ืŸ ื“ื™ืœื™ืฉืึทืŸ ืึธืคื˜ ื•ื™ืกืงื•ืžืขืŸ ื•ื•ื™ ืึท ื’ืขื’ืขื‘ืŸ. ืึธื‘ืขืจ ื ื™ืฉื˜ ืื™ืŸ ื“ืขืจ ื•ื•ืขืœื˜.

ื“ื•ืจืš ื“ืขื ื•ื•ืขื’, ื“ื™ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืฉื˜ืจื™ืš ืื™ื– ื’ืขื‘ืขื˜ืŸ ืคึฟืึทืจ ืึท ืœืึทื ื’ ืฆื™ื™ึทื˜. ื“ืืก ืจืขื•ื•ื™ื–ื™ืข ะธ ืืŸ ืื ื“ืขืจ, ืคึฟืึทืจื‘ื•ื ื“ืŸ ืžื™ื˜ ืื™ื, ืื™ื– ืึทืงื˜ื™ื•ื•ืœื™ ื“ื™ืกืงืึทืกื˜. ืกืณื”ืื˜ ื’ืขื”ืื˜ ื ื’ืขืคื™ืœ, ืื– ืืณืฐืขื˜ ื‘ืืœื“ ื’ืขืฉืขืŸ. ืื‘ืขืจ ื“ืขืžืึธืœื˜ ืึทืœืฅ ืื™ื‘ืขืจื’ืขื–ืขืฆื˜ ืื™ืŸ ื“ื™ ื”ืงื“ืžื” ืคื•ืŸ ืฉื˜ืึทืจืง ืื•ืŸ ืฉื•ื•ืึทืš ืœื™ื ืงืก, ื•ื•ืึธืก ื•ื•ืึธืœื˜ ืื•ื™ืš ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืกืึธืœื•ื•ืข ื“ืขื ืคึผืจืึธื‘ืœืขื. ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืึทื ืฅ ืœืขื‘ืขื“ื™ืง ืื•ืŸ ืึทืงื˜ื™ื•ื• ืื•ื™ืฃ ื“ืขื ืึทืจื‘ืขื˜ ืฆื™ืขืŸ ื‘ืขื˜ืŸ, ืฐืขืœื›ืข ืจ ืื™ ื– ืื™ืฆ ื˜ ืืคื’ืขืฉื˜ืขืœื˜ ื’ืขืฐืืจ ืŸ ืฆื•ืœื™ ื‘ ืื™ื ืขืจืœืขื›ืข ืฉืฐืขืจื™ืงืฒื˜ืŸ .

ื“ืึทื˜ืึท ืจื™ื ืขืŸ ืึธืŸ ืงืึทืกืงื™ื™ื“ื™ื ื’ ื“ื™ืœื™ืฉืึทืŸ

ื•ื•ื™ ืคึผื•ื ืงื˜ ืจื™ื ืขืŸ ื“ืึทื˜ืŸ ืื•ื™ื‘ ืื™ืจ ืคืึทืจืœืึธื–ื  ื–ื™ืš ืึท ื ื™ื˜-ืขื’ื–ื™ืกื˜ืึทื ื˜ ืงืึทืกืงื™ื™ื“ื™ื ื’ ื•ื™ืกืžืขืงืŸ? ืื•ื™ื‘ ืื™ืจ ื”ืึธื‘ืŸ ื ืขืกื˜ืขื“ ืจืขืึทืœื ืึทื‘ื“ื–ืฉืขืงืฅ, ื–ื™ื™ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืื•ื™ืกื’ืขืžืขืงื˜.
ืœืึธืžื™ืจ ืงื•ืงืŸ ืื•ื™ืฃ ืึท (ื›ึผืžืขื˜) ืคืึทืงื˜ื™ืฉ ื‘ื™ื™ืฉืคึผื™ืœ. ืžื™ืจ ื”ืึธื‘ืŸ ืึท ื›ื™ื™ืคืขืฅ CartItemEntity:

@RealmClass
class CartItemEntity(
 @PrimaryKey
 override var id: String? = null,
 ...
 var name: String = "",
 var description: String = "",
 var image: ImageEntity? = null,
 var category: String = MENU_CATEGORY_UNKNOWN_ID,
 var customizationEntity: CustomizationEntity? = null,
 var cartComboProducts: RealmList<CartProductEntity> = RealmList(),
 ...
) : RealmObject()

ื“ืขืจ ืคึผืจืึธื“ื•ืงื˜ ืื™ืŸ ื“ื™ ื•ื•ืึธื’ืŸ ื”ืื˜ ืคืึทืจืฉื™ื“ืขื ืข ืคืขืœื“ืขืจ, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืึท ื‘ื™ืœื“ ImageEntity, ืงืึทืกื˜ืึทืžื™ื™ื–ื“ ื™ื ื’ืจื™ื“ื™ืึทื ืฅ CustomizationEntity. ืื•ื™ืš, ื“ื™ ืคึผืจืึธื“ื•ืงื˜ ืื™ืŸ ื“ื™ ื•ื•ืึธื’ืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืึท ืงืึธืžื‘ืึธ ืžื™ื˜ ื–ื™ื™ืŸ ืื™ื™ื’ืขื ืข ื’ืึทื ื’ ืคื•ืŸ ืคึผืจืึธื“ื•ืงื˜ืŸ RealmList (CartProductEntity). ืึทืœืข ืœื™ืกื˜ืขื“ ืคืขืœื“ืขืจ ื–ืขื ืขืŸ ืจืขืึทืœื ืึทื‘ื“ื–ืฉืขืงืฅ. ืื•ื™ื‘ ืžื™ืจ ืึทืจื™ื™ึทื ืœื™ื™ื’ืŸ ืึท ื ื™ื™ึทืข ื›ื™ื™ืคืขืฅ (copyToRealm () / copyToRealmOrUpdate ()) ืžื™ื˜ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฉื™ื™ึทืŸ, ื“ืขื ื›ื™ื™ืคืขืฅ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืึธืจ ืึธื•ื•ื•ืขืจืจื™ื˜ืึทืŸ. ืึธื‘ืขืจ ืึทืœืข ื™ื ืขืจืœืขืš ืึทื‘ื“ื–ืฉืขืงืฅ (ื‘ื™ืœื“, ืงื•ืกื˜ืึธืžื™ื–ืึทื˜ื™ืึธืŸ ืขื ื˜ื™ื˜ื™ ืื•ืŸ ืงืึทืจื˜ืงืึธืžื‘ืึธืคึผืจืึธื“ื•ืงืฅ) ื•ื•ืขื˜ ืคืึทืจืœื™ืจืŸ ืงืฉืจ ืžื™ื˜ ื“ื™ ืคืึธื˜ืขืจ ืื•ืŸ ื‘ืœื™ื™ื‘ืŸ ืื™ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก.

ื–ื™ื ื˜ ื“ื™ ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ ืžื™ื˜ ื–ื™ื™ ืื™ื– ืคืึทืจืคืึทืœืŸ, ืžื™ืจ ื ื™ื˜ ืžืขืจ ืœื™ื™ืขื ืขืŸ ื–ื™ื™ ืึธื“ืขืจ ื•ื™ืกืžืขืงืŸ ื–ื™ื™ (ืกื™ื™ึทื“ืŸ ืžื™ืจ ื‘ืคื™ืจื•ืฉ ืึทืงืกืขืก ื–ื™ื™ ืึธื“ืขืจ ื•ื™ืกืžืขืงืŸ ื“ื™ ื’ืื ืฆืข "ื˜ื™ืฉ"). ืžื™ืจ ื’ืขืจื•ืคืŸ ื“ืขื "ื–ื™ืงืึธืจืŸ ืœื™ืงืก".

ื•ื•ืขืŸ ืžื™ืจ ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ Realm, ืžื™ืจ ืžื•ื–ืŸ ื‘ืคื™ืจื•ืฉ ื“ื•ืจื›ื’ื™ื™ืŸ ืึทืœืข ื“ื™ ืขืœืขืžืขื ื˜ืŸ ืื•ืŸ ื‘ืคื™ืจื•ืฉ ืื•ื™ืกืžืขืงืŸ ืึทืœืฅ ืื™ื™ื“ืขืจ ืึทื–ืึท ืึทืคึผืขืจื™ื™ืฉืึทื ื–. ื“ืึธืก ืงืขืŸ ื–ื™ื™ืŸ ื’ืขื˜ืืŸ, ืœืžืฉืœ, ื•ื•ื™ ื“ืึธืก:

val entity = realm.where(CartItemEntity::class.java).equalTo("id", id).findFirst()
if (first != null) {
 deleteFromRealm(first.image)
 deleteFromRealm(first.customizationEntity)
 for(cartProductEntity in first.cartComboProducts) {
   deleteFromRealm(cartProductEntity)
 }
 first.deleteFromRealm()
}
// ะธ ะฟะพั‚ะพะผ ัƒะถะต ัะพั…ั€ะฐะฝัะตะผ

ืื•ื™ื‘ ืื™ืจ ื˜ืึธืŸ ื“ืึธืก, ืึทืœืฅ ื•ื•ืขื˜ ืึทืจื‘ืขื˜ืŸ ื•ื•ื™ ืขืก ื–ืึธืœ. ืื™ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ, ืžื™ืจ ื™ื‘ืขืจื ืขืžืขืŸ ืึทื– ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ ืื ื“ืขืจืข ื ืขืกื˜ืขื“ ืจืขืึทืœื ืึทื‘ื“ื–ืฉืขืงืฅ ืื™ืŸ ื‘ื™ืœื“, ืงื•ืกื˜ืึธืžื™ื–ืึทื˜ื™ืึธืŸ ืขื ื˜ื™ื˜ื™ ืื•ืŸ ืงืึทืจื˜ืงืึธืžื‘ืึธืคึผืจืึธื“ื•ืงืฅ, ืึทื–ื•ื™ ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ ืื ื“ืขืจืข ื ืขืกื˜ืขื“ ืœื•ืคึผืก ืื•ืŸ ื“ื™ืœื™ืฅ.

ืฉื ืขืœ ืœื™ื™ื–ื•ื ื’

ื“ืขืจ ืขืจืฉื˜ืขืจ ื–ืึทืš ื•ื•ืึธืก ืžื™ืจ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ื˜ืึธืŸ ืื™ื– ืฆื• ืจื™ื™ืŸ ืึทืจื•ื™ืฃ ื“ื™ ืคืึทืกื˜ืึทืกื˜ ื’ืจืึธื•ื™ื ื’ ืึทื‘ื“ื–ืฉืขืงืฅ ืื•ืŸ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืฆื• ื–ืขืŸ ืื•ื™ื‘ ื“ืึธืก ื•ื•ืึธืœื˜ ืกืึธืœื•ื•ืข ืื•ื ื“ื–ืขืจ ืึธืจื™ื’ื™ื ืขืœ ืคึผืจืึธื‘ืœืขื. ืขืจืฉื˜ืขืจ, ื“ื™ ืกื™ืžืคึผืœืึทืกื˜ ืื•ืŸ ืžืขืจืกื˜ ื™ื ื˜ื•ืึทื˜ื™ื•ื• ืœื™ื™ื–ื•ื ื’ ืื™ื– ื’ืขืžืื›ื˜, ื ื™ื™ืžืœื™: ื™ืขื“ืขืจ ื›ื™ื™ืคืขืฅ ื–ืึธืœ ื–ื™ื™ืŸ ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ืจื™ืžื•ื•ื•ื™ื ื’ ื–ื™ื™ึทืŸ ืงื™ื ื“ืขืจ. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืžื™ืจ ื‘ืึทืงืขื ืขื  ืึท ืฆื•ื‘ื™ื ื“ ื•ื•ืึธืก ื”ืึธื˜ ืื•ืžื’ืขืงืขืจื˜ ืึท ืจืฉื™ืžื” ืคื•ืŸ ื–ื™ื™ึทืŸ ื ืขืกื˜ืขื“ ืจืขืึทืœื ืึทื‘ื“ื–ืฉืขืงืฅ:

interface NestedEntityAware {
 fun getNestedEntities(): Collection<RealmObject?>
}

ืื•ืŸ ืžื™ืจ ื™ืžืคึผืœืึทืžืขื ืึทื“ ืขืก ืื™ืŸ ืื•ื ื“ื–ืขืจ ืจืขืึทืœื ืึทื‘ื“ื–ืฉืขืงืฅ:

@RealmClass
class DataPizzeriaEntity(
 @PrimaryKey
 var id: String? = null,
 var name: String? = null,
 var coordinates: CoordinatesEntity? = null,
 var deliverySchedule: ScheduleEntity? = null,
 var restaurantSchedule: ScheduleEntity? = null,
 ...
) : RealmObject(), NestedEntityAware {

 override fun getNestedEntities(): Collection<RealmObject?> {
   return listOf(
       coordinates,
       deliverySchedule,
       restaurantSchedule
   )
 }
}

ะ’ getNestedEntities ืžื™ืจ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืึทืœืข ืงื™ื ื“ืขืจ ื•ื•ื™ ืึท ืคืœืึทืš ืจืฉื™ืžื”. ืื•ืŸ ื™ืขื“ืขืจ ืงื™ื ื“ ืึทื‘ื“ื–ืฉืขืงื˜ ืงืขื ืขืŸ ืื•ื™ืš ื™ื ืกื˜ืจื•ืžืขื ื˜ ื“ื™ NestedEntityAware ืฆื•ื‘ื™ื ื“, ื•ื•ืึธืก ื™ื ื“ื™ืงื™ื™ืฅ ืึทื– ืขืก ื”ืื˜ ื™ื ืขืจืœืขืš ืจืขืึทืœื ืึทื‘ื“ื–ืฉืขืงืฅ ืฆื• ื•ื™ืกืžืขืงืŸ, ืœืžืฉืœ ScheduleEntity:

@RealmClass
class ScheduleEntity(
 var monday: DayOfWeekEntity? = null,
 var tuesday: DayOfWeekEntity? = null,
 var wednesday: DayOfWeekEntity? = null,
 var thursday: DayOfWeekEntity? = null,
 var friday: DayOfWeekEntity? = null,
 var saturday: DayOfWeekEntity? = null,
 var sunday: DayOfWeekEntity? = null
) : RealmObject(), NestedEntityAware {

 override fun getNestedEntities(): Collection<RealmObject?> {
   return listOf(
       monday, tuesday, wednesday, thursday, friday, saturday, sunday
   )
 }
}

ืื•ืŸ ืึทื–ื•ื™ ืื•ื™ืฃ, ื“ื™ ื ืขืกื˜ื™ื ื’ ืคื•ืŸ ืึทื‘ื“ื–ืฉืขืงืฅ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจื™ืคึผื™ื˜ื™ื“.

ื“ืขืจื ืึธืš ืžื™ืจ ืฉืจื™ื™ึทื‘ืŸ ืึท ืื•ืคึฟืŸ ืึทื– ืจืขืงื•ืจืกื™ื•ื•ืœื™ ื“ื™ืœื™ืฅ ืึทืœืข ื ืขืกื˜ืขื“ ืึทื‘ื“ื–ืฉืขืงืฅ. ืื•ืคึฟืŸ (ื’ืขืžืื›ื˜ ื•ื•ื™ ืึท ืคืึทืจืœืขื ื’ืขืจื•ื ื’) deleteAllNestedEntities ื’ืขืฅ ืึทืœืข ืฉืคึผื™ืฅ-ืžื“ืจื’ื” ืึทื‘ื“ื–ืฉืขืงืฅ ืื•ืŸ ืžืขื˜ื”ืึธื“ืก deleteNestedRecursively ืจื™ืงื•ืจืกื™ื•ื• ืจื™ืžื•ื•ื•ื– ืึทืœืข ื ืขืกื˜ืขื“ ืึทื‘ื“ื–ืฉืขืงืฅ ื ื™ืฆืŸ ื“ื™ NestedEntityAware ืฆื•ื‘ื™ื ื“:

fun <T> Realm.deleteAllNestedEntities(entities: Collection<T>,
 entityClass: Class<out RealmObject>,
 idMapper: (T) -> String,
 idFieldName : String = "id"
 ) {

 val existedObjects = where(entityClass)
     .`in`(idFieldName, entities.map(idMapper).toTypedArray())
     .findAll()

 deleteNestedRecursively(existedObjects)
}

private fun Realm.deleteNestedRecursively(entities: Collection<RealmObject?>) {
 for(entity in entities) {
   entity?.let { realmObject ->
     if (realmObject is NestedEntityAware) {
       deleteNestedRecursively((realmObject as NestedEntityAware).getNestedEntities())
     }
     realmObject.deleteFromRealm()
   }
 }
}

ืžื™ืจ ื”ืื‘ืŸ ื“ืึธืก ืžื™ื˜ ื“ื™ ืคืึทืกื˜ืึทืกื˜ ื’ืจืึธื•ื™ื ื’ ืึทื‘ื“ื–ืฉืขืงืก ืื•ืŸ ืึธืคึผื’ืขืฉื˜ืขืœื˜ ื•ื•ืึธืก ื’ืขื˜ืจืืคืŸ.

ื“ื™ ืžืขืฉื” ืคื•ืŸ ื•ื•ื™ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืื™ืŸ ืจืขืึทืœื ื•ื•ืึทืŸ ืื™ื‘ืขืจ ืึท ืœืึทื ื’ ืงืึทื˜ืขืจ

ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ื“ื™ ืึทื‘ื“ื–ืฉืขืงืฅ ื•ื•ืึธืก ืžื™ืจ ื‘ืื“ืขืงื˜ ืžื™ื˜ ื“ืขื ืœื™ื™ื–ื•ื ื’ ืคืืจืฉื˜ืืคื˜ ื’ืจืึธื•ื™ื ื’. ืื•ืŸ ื“ื™ ืงื•ื™ืœืขืœื“ื™ืง ื•ื•ื•ึผืงืก ืคื•ืŸ ื“ื™ ื‘ืึทื–ืข ืกืœืึธื•ื“, ืึธื‘ืขืจ ื”ืื˜ ื ื™ืฉื˜ ื”ืึทืœื˜ืŸ.

ื“ื™ "ื ืึธืจืžืึทืœ" ืœื™ื™ื–ื•ื ื’

ื›ืึธื˜ืฉ ื“ื™ ื‘ืึทื–ืข ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ื•ื•ืึทืงืกืŸ ืกืœืึธื•ืœื™, ืขืก ื ืึธืš ื’ืขื•ื•ืืงืกืŸ. ืึทื–ื•ื™ ืžื™ืจ ืื ื’ืขื”ื•ื™ื‘ืŸ ืงื•ืงืŸ ื•ื•ื™ื™ึทื˜ืขืจ. ืื•ื ื“ื–ืขืจ ืคึผืจื•ื™ืขืงื˜ ืžืื›ื˜ ื–ื™ื™ืขืจ ืึทืงื˜ื™ื•ื• ื ื•ืฆืŸ ืคื•ืŸ ื“ืึทื˜ืŸ ืงืึทื˜ืฉื™ื ื’ ืื™ืŸ ืจืขืึทืœื. ื“ืขืจื™ื‘ืขืจ, ืฉืจื™ื™ื‘ืŸ ืึทืœืข ื ืขืกื˜ืขื“ ืึทื‘ื“ื–ืฉืขืงืฅ ืคึฟืึทืจ ื™ืขื“ืขืจ ื›ื™ื™ืคืขืฅ ืื™ื– ืึทืจื‘ืขื˜-ืื™ื ื˜ืขื ืกื™ื•ื•ืข, ืคึผืœื•ืก ื“ื™ ืจื™ื–ื™ืงื™ืจืŸ ืคื•ืŸ ืขืจืจืึธืจืก ื™ื ืงืจื™ืกื™ื–, ื•ื•ื™ื™ึทืœ ืื™ืจ ืงืขื ืขืŸ ืคืึทืจื’ืขืกืŸ ืฆื• ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ืึทื‘ื“ื–ืฉืขืงืฅ ื•ื•ืขืŸ ื˜ืฉืึทื ื’ื™ื ื’ ื“ื™ ืงืึธื“.

ืื™ืš ื’ืขื•ื•ืืœื˜ ืฆื• ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– ืื™ืš ื˜ืึธืŸ ื ื™ื˜ ื ื•ืฆืŸ ื™ื ื˜ืขืจืคื™ื™ืกื™ื–, ืึธื‘ืขืจ ืึทื– ืึทืœืฅ ื’ืขืืจื‘ืขื˜ ืื•ื™ืฃ ื–ื™ืš.

ื•ื•ืขืŸ ืžื™ืจ ื•ื•ื™ืœืŸ ืขืคึผืขืก ืฆื• ืึทืจื‘ืขื˜ืŸ ืื•ื™ืฃ ื–ื™ืš, ืžื™ืจ ื”ืึธื‘ืŸ ืฆื• ื ื•ืฆืŸ ืึธืคึผืฉืคึผื™ื’ืœื•ื ื’. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืžื™ืจ ืงืขื ืขืŸ ื’ื™ื™ืŸ ื“ื•ืจืš ื™ืขื“ืขืจ ืงืœืึทืก ืคืขืœื“ ืื•ืŸ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืฆื™ ืขืก ืื™ื– ืึท ืจืขืึทืœื ื›ื™ื™ืคืขืฅ ืึธื“ืขืจ ืึท ืจืฉื™ืžื” ืคื•ืŸ ืึทื‘ื“ื–ืฉืขืงืฅ:

RealmModel::class.java.isAssignableFrom(field.type)

RealmList::class.java.isAssignableFrom(field.type)

ืื•ื™ื‘ ื“ื™ ืคืขืœื“ ืื™ื– ืึท ืจืขืึทืœืžืžืึธื“ืขืœ ืึธื“ืขืจ ืจืขืึทืœืžืœื™ืกื˜, ืœื™ื™ื’ ื“ื™ ื›ื™ื™ืคืขืฅ ืคื•ืŸ ื“ืขื ืคืขืœื“ ืฆื• ืึท ืจืฉื™ืžื” ืคื•ืŸ ื ืขืกื˜ืขื“ ืึทื‘ื“ื–ืฉืขืงืฅ. ืึทืœืฅ ืื™ื– ืคึผื•ื ืงื˜ ื“ื™ ื–ืขืœื‘ืข ื•ื•ื™ ืžื™ืจ ื”ืื‘ืŸ ืื•ื™ื‘ืŸ, ื ืึธืจ ื“ืึธ ื•ื•ืขื˜ ืขืก ื•ื•ืขืจืŸ ื’ืขื˜ืืŸ ืคื•ืŸ ื–ื™ืš. ื“ื™ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืื•ืคึฟืŸ ื–ื™ืš ืื™ื– ื–ื™ื™ืขืจ ืคึผืฉื•ื˜ ืื•ืŸ ืงื•ืงื˜ ื•ื•ื™ ื“ืึธืก:

fun <T : Any> Realm.cascadeDelete(entities: Collection<T?>) {
 if(entities.isEmpty()) {
   return
 }

 entities.filterNotNull().let { notNullEntities ->
   notNullEntities
       .filterRealmObject()
       .flatMap { realmObject -> getNestedRealmObjects(realmObject) }
       .also { realmObjects -> cascadeDelete(realmObjects) }

   notNullEntities
       .forEach { entity ->
         if((entity is RealmObject) && entity.isValid) {
           entity.deleteFromRealm()
         }
       }
 }
}

ืคืึทืจืœืขื ื’ืขืจื•ื ื’ filterRealmObject ืคื™ืœื˜ืขืจืก ืื•ื™ืก ืื•ืŸ ืคึผืึทืกื™ื– ื‘ืœื•ื™ื– ืจืขืึทืœื ืึทื‘ื“ื–ืฉืขืงืฅ. ืžืขื˜ืึธื“ getNestedRealmObjects ื“ื•ืจืš ืึธืคึผืฉืคึผื™ื’ืœื•ื ื’, ืขืก ื’ืขืคื™ื ื˜ ืึทืœืข ื ืขืกื˜ืขื“ ืจืขืึทืœื ืึทื‘ื“ื–ืฉืขืงืฅ ืื•ืŸ ืฉื˜ืขืœืŸ ื–ื™ื™ ืื™ืŸ ืึท ืœื™ื ืขืึทืจ ืจืฉื™ืžื”. ื“ืขืจื ืึธืš ืžื™ืจ ื˜ืึธืŸ ื“ื™ ื–ืขืœื‘ืข ื–ืึทืš ืจืขืงื•ืจืกื™ื•ื•ืขืœื™. ื•ื•ืขืŸ ื“ื™ืœื™ื˜ื™ื ื’, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ื›ื™ื™ืคืขืฅ ืคึฟืึทืจ ื’ื™ืœื˜ื™ืงื™ื™ึทื˜ isValid, ื•ื•ื™ื™ึทืœ ืขืก ืงืขืŸ ื–ื™ื™ืŸ ืึทื– ืคืึทืจืฉื™ื“ืขื ืข ืคืึธื˜ืขืจ ืึทื‘ื“ื–ืฉืขืงืฅ ืงืขื ืขืŸ ื”ืึธื‘ืŸ ื ืขืกื˜ืขื“ ื™ื™ื“ืขื ื™ืงืึทืœ ืึธื ืขืก. ืขืก ืื™ื– ื‘ืขืกืขืจ ืฆื• ื•ื™ืกืžื™ื™ื“ืŸ ื“ืขื ืื•ืŸ ืคืฉื•ื˜ ื ื•ืฆืŸ ืึทื•ื˜ืึธ-ื“ื•ืจ ืคื•ืŸ ืฉื™ื™ึทืŸ ื•ื•ืขืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ ื ื™ื™ึท ืึทื‘ื“ื–ืฉืขืงืฅ.

ื“ื™ ืžืขืฉื” ืคื•ืŸ ื•ื•ื™ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืื™ืŸ ืจืขืึทืœื ื•ื•ืึทืŸ ืื™ื‘ืขืจ ืึท ืœืึทื ื’ ืงืึทื˜ืขืจ

ื’ืึทื ืฅ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ getNestedRealmObjects ืื•ืคึฟืŸ

private fun getNestedRealmObjects(realmObject: RealmObject) : List<RealmObject> {
 val nestedObjects = mutableListOf<RealmObject>()
 val fields = realmObject.javaClass.superclass.declaredFields

// ะŸั€ะพะฒะตั€ัะตะผ ะบะฐะถะดะพะต ะฟะพะปะต, ะฝะต ัะฒะปัะตั‚ัั ะปะธ ะพะฝะพ RealmModel ะธะปะธ ัะฟะธัะบะพะผ RealmList
 fields.forEach { field ->
   when {
     RealmModel::class.java.isAssignableFrom(field.type) -> {
       try {
         val child = getChildObjectByField(realmObject, field)
         child?.let {
           if (isInstanceOfRealmObject(it)) {
             nestedObjects.add(child as RealmObject)
           }
         }
       } catch (e: Exception) { ... }
     }

     RealmList::class.java.isAssignableFrom(field.type) -> {
       try {
         val childList = getChildObjectByField(realmObject, field)
         childList?.let { list ->
           (list as RealmList<*>).forEach {
             if (isInstanceOfRealmObject(it)) {
               nestedObjects.add(it as RealmObject)
             }
           }
         }
       } catch (e: Exception) { ... }
     }
   }
 }

 return nestedObjects
}

private fun getChildObjectByField(realmObject: RealmObject, field: Field): Any? {
 val methodName = "get${field.name.capitalize()}"
 val method = realmObject.javaClass.getMethod(methodName)
 return method.invoke(realmObject)
}

ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืื™ืŸ ืื•ื ื“ื–ืขืจ ืงืœื™ืขื ื˜ ืงืึธื“ ืžื™ืจ ื ื•ืฆืŸ "ืงืึทืกืงืึทื“ื™ื ื’ ื•ื™ืกืžืขืงืŸ" ืคึฟืึทืจ ื™ืขื“ืขืจ ื“ืึทื˜ืŸ ืžืึธื“ื™ืคื™ืงืึทื˜ื™ืึธืŸ ืึธืคึผืขืจืึทืฆื™ืข. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืคึฟืึทืจ ืึท ืึทืจื™ื™ึทื ืœื™ื™ื’ืŸ ืึธืคึผืขืจืึทืฆื™ืข ืขืก ืงื•ืงื˜ ื•ื•ื™ ื“ืึธืก:

override fun <T : Entity> insert(
 entityInformation: EntityInformation,
 entities: Collection<T>): Collection<T> = entities.apply {
 realmInstance.cascadeDelete(getManagedEntities(entityInformation, this))
 realmInstance.copyFromRealm(
     realmInstance
         .copyToRealmOrUpdate(this.map { entity -> entity as RealmModel }
 ))
}

ืขืจืฉื˜ืขืจ ืื•ืคึฟืŸ getManagedEntities ื ืขืžื˜ ืึทืœืข ืฆื•ื’ืขืœื™ื™ื’ื˜ ืึทื‘ื“ื–ืฉืขืงืฅ, ืื•ืŸ ื“ืขืžืึธืœื˜ ื“ืขืจ ืื•ืคึฟืŸ cascadeDelete ืจืขืงื•ืจืกื™ื•ื•ืขืœื™ ื“ื™ืœื™ืฅ ืึทืœืข ื’ืขื–ืืžืœื˜ ืึทื‘ื“ื–ืฉืขืงืฅ ืื™ื™ื“ืขืจ ืฉืจื™ื™ื‘ืŸ ื ื™ื™ึท ืึธื ืขืก. ืžื™ืจ ืกื•ืฃ ืึทืจื•ื™ืฃ ื ื™ืฆืŸ ื“ืขื ืฆื•ื’ืึทื ื’ ื‘ืขืฉืึทืก ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ. ื–ื›ึผืจื•ืŸ ืœื™ืงืก ืื™ืŸ ืจืขืึทืœื ื–ืขื ืขืŸ ื’ืึธืจ ื ื™ื˜ืึธ. ื•ื•ืขืŸ ืžื™ืจ ื”ืึธื‘ืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ื“ื™ ื–ืขืœื‘ืข ืžืขื–ืฉืขืจืžืึทื ื˜ ืคื•ืŸ ื“ื™ ืึธืคืขื ื’ื™ืงื™ื™ึทื˜ ืคื•ืŸ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜ ืื•ื™ืฃ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืงืึทืœื˜ ืกื˜ืึทืจืฅ ืคื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ืžื™ืจ ื–ืขืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜.

ื“ื™ ืžืขืฉื” ืคื•ืŸ ื•ื•ื™ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืื™ืŸ ืจืขืึทืœื ื•ื•ืึทืŸ ืื™ื‘ืขืจ ืึท ืœืึทื ื’ ืงืึทื˜ืขืจ

ื“ื™ ื’ืจื™ืŸ ืฉื•ืจื” ื•ื•ื™ื™ื–ื˜ ื“ื™ ืึธืคืขื ื’ื™ืงื™ื™ึทื˜ ืคื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜ ืื•ื™ืฃ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืงืึทืœื˜ ืกื˜ืึทืจืฅ ื‘ืขืฉืึทืก ืึธื˜ืึทืžืึทื˜ื™ืง ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืคื•ืŸ ื ืขืกื˜ืขื“ ืึทื‘ื“ื–ืฉืขืงืฅ.

ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืื•ืŸ ืงืึทื ืงืœื•ื–ืฉืึทื ื–

ื“ื™ ื˜ืึธืžื™ื“-ื’ืจืึธื•ื™ื ื’ ืจืขืึทืœื ื“ืึทื˜ืึทื‘ื™ื™ืก ื”ืื˜ ื’ืขืคึฟื™ืจื˜ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื• ืงืึทื˜ืขืจ ื–ื™ื™ืขืจ ืกืœืึธื•ืœื™. ืžื™ืจ ื‘ืืคืจื™ื™ื˜ ืึท ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืžื™ื˜ ืื•ื ื“ื–ืขืจ ืื™ื™ื’ืขื ืข "ืงืึทืกืงืึทื“ื™ื ื’ ื•ื™ืกืžืขืงืŸ" ืคื•ืŸ ื ืขืกื˜ืขื“ ืึทื‘ื“ื–ืฉืขืงืฅ. ืื•ืŸ ืื™ืฆื˜ ืžื™ืจ ืžืึธื ื™ื˜ืึธืจ ืื•ืŸ ืึธืคึผืฉืึทืฆืŸ ื•ื•ื™ ืื•ื ื“ื–ืขืจ ื‘ืึทืฉืœื•ืก ืึทืคืขืงื˜ืึทื“ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜ ื“ื•ืจืš ื“ื™ _app_start ืžืขื˜ืจื™ืง.

ื“ื™ ืžืขืฉื” ืคื•ืŸ ื•ื•ื™ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืื™ืŸ ืจืขืึทืœื ื•ื•ืึทืŸ ืื™ื‘ืขืจ ืึท ืœืึทื ื’ ืงืึทื˜ืขืจ

ืคึฟืึทืจ ืึทื ืึทืœื™ืกื™ืก, ืžื™ืจ ื ืขืžืขืŸ ืึท ืฆื™ื™ื˜ ืคื•ืŸ 90 ื˜ืขื’ ืื•ืŸ ื–ืขืŸ: ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืึทื˜ืขืจ ืฆื™ื™ื˜, ื‘ื™ื™ื“ืข ื“ื™ ืžื™ื“ื™ืึทืŸ ืื•ืŸ ื“ื™ ื•ื•ืึธืก ืคืึทืœืŸ ืื•ื™ืฃ ื“ื™ 95 ืคึผืจืึธืฆืขื ื˜ ืคื•ืŸ ื ื™ืฆืขืจืก, ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ืคืึทืจืžื™ื ืขืจืŸ ืื•ืŸ ื ื™ื˜ ืžืขืจ ืจื™ืกืขืก.

ื“ื™ ืžืขืฉื” ืคื•ืŸ ื•ื•ื™ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืื™ืŸ ืจืขืึทืœื ื•ื•ืึทืŸ ืื™ื‘ืขืจ ืึท ืœืึทื ื’ ืงืึทื˜ืขืจ

ืื•ื™ื‘ ืื™ืจ ืงื•ืง ืื™ืŸ ื“ื™ ื–ื™ื‘ืŸ-ื˜ืึธื’ ื˜ืฉืึทืจื˜, ื“ื™ _app_start ืžืขื˜ืจื™ืง ืงื•ืงื˜ ื’ืึธืจ ื˜ื•ื™ื’ืŸ ืื•ืŸ ืื™ื– ื•ื•ื™ื™ื ื™ืงืขืจ ื•ื•ื™ 1 ืกืขืงื•ื ื“ืข.

ืขืก ืื™ื– ืื•ื™ืš ื•ื•ืขืจื˜ ืฆื• ืœื™ื™ื’ืŸ ืึทื– ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜, Firebase ืกืขื ื“ื– ื ืึธื•ื˜ืึทืคืึทืงื™ื™ืฉืึทื ื– ืื•ื™ื‘ ื“ื™ ืžื™ื“ื™ืึทืŸ ื•ื•ืขืจื˜ ืคื•ืŸ _app_start ื™ืงืกื™ื“ื– 5 ืกืขืงื•ื ื“ืขืก. ืึธื‘ืขืจ, ื•ื•ื™ ืžื™ืจ ืงืขื ืขืŸ ื–ืขืŸ, ืื™ืจ ื–ืึธืœ ื ื™ืฉื˜ ืคืึทืจืœืึธื–ื  ื–ื™ืš ืื•ื™ืฃ ื“ืขื, ืึธื‘ืขืจ ืืœื ื’ื™ื™ืŸ ืื™ืŸ ืื•ืŸ ื˜ืฉืขืง ืขืก ื‘ืคื™ืจื•ืฉ.

ื“ื™ ืกืคึผืขืฆื™ืขืœืข ื–ืึทืš ื•ื•ืขื’ืŸ ื“ื™ ืจืขืึทืœื ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ื– ืึทื– ืขืก ืื™ื– ืึท ื ื™ื˜-ืจื™ืœื™ื™ืฉืึทื ืึทืœ ื“ืึทื˜ืึทื‘ื™ื™ืก. ื˜ืจืึธืฅ ื–ื™ื™ืŸ ื™ื– ืคื•ืŸ ื ื•ืฆืŸ, ืขื ืœืขื›ืงื™ื™ื˜ ืฆื• ORM ืกืึทืœื•ืฉืึทื ื– ืื•ืŸ ืึทื‘ื“ื–ืฉืขืงืฅ ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’, ืขืก ื˜ื•ื˜ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ.

ืื•ื™ื‘ ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ื’ืขื ื•ืžืขืŸ ืื™ืŸ ื—ืฉื‘ื•ืŸ, ื ืขืกื˜ืขื“ ืึทื‘ื“ื–ืฉืขืงืฅ ื•ื•ืขื˜ ืึธื ืงืœื™ื™ึทื‘ืŸ ืื•ืŸ "ืจื™ื ืขืŸ ืึทื•ื•ืขืง." ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ืขื˜ ื•ื•ืึทืงืกืŸ ืงืขืกื™ื™ื“ืขืจ, ื•ื•ืึธืก ืื™ืŸ ืงืขืจ ื•ื•ืขื˜ ื•ื•ื™ืจืงืŸ ื“ื™ ืกืœืึธื•ื“ืึทื•ืŸ ืึธื“ืขืจ ืกื˜ืึทืจื˜ืึทืคึผ ืคื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ.

ืื™ืš ื”ืึธื‘ ื’ืขื˜ื™ื™ืœื˜ ืื•ื ื“ื–ืขืจ ื“ืขืจืคืึทืจื•ื ื’ ื•ื•ื™ ืึทื–ื•ื™ ืฆื• ื’ืขืฉื•ื•ื™ื ื“ ืžืึทื›ืŸ ืึท ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืคื•ืŸ ืึทื‘ื“ื–ืฉืขืงืฅ ืื™ืŸ ืจืขืึทืœื, ื•ื•ืึธืก ืื™ื– ื ืึธืš ื ื™ืฉื˜ ืื•ื™ืก ืคื•ืŸ ื“ื™ ืงืขืกื˜ืœ, ืึธื‘ืขืจ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืขืจืขื“ื˜ ื•ื•ืขื’ืŸ ืคึฟืึทืจ ืึท ืœืึทื ื’ ืฆื™ื™ึทื˜ ื–ื™ื™ ื–ืึธื’ืŸ ะธ ื–ื™ื™ ื–ืึธื’ืŸ. ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, ื“ืึธืก ืื™ื– ื–ื™ื™ืขืจ ืกืคึผื™ื“ืึทื“ ื“ื™ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜ ืคื•ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ.

ื˜ืจืึธืฅ ื“ื™ ื“ื™ืกืงื•ืกื™ืข ื•ื•ืขื’ืŸ ื“ื™ ืึธื˜ - ืึธื˜ ืื•ื™ืกื–ืขืŸ ืคื•ืŸ ื“ืขื ืฉื˜ืจื™ืš, ื“ืขืจ ืึทื•ื•ืขืง ืคื•ืŸ ืงืึทืกืงื™ื™ื“ ื“ื™ืœื™ืฉืึทืŸ ืื™ืŸ ืจืขืึทืœื ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ื“ื•ืจืš ืคึผืœืึทืŸ. ืื•ื™ื‘ ืื™ืจ ืคึผืœืึทืŸ ืึท ื ื™ื™ึทืข ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ื ืขืžืขืŸ ื“ืขื ืื™ืŸ ื—ืฉื‘ื•ืŸ. ืื•ืŸ ืื•ื™ื‘ ืื™ืจ ืฉื•ื™ืŸ ื ื™ืฆืŸ Realm, ื˜ืฉืขืง ืื•ื™ื‘ ืื™ืจ ื”ืึธื‘ืŸ ืึทื–ืึท ืคึผืจืึธื‘ืœืขืžืก.

ืžืงื•ืจ: www.habr.com