เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฐเชฟเชฏเชฒเชฎเชฎเชพเช‚ เช•เชพเชธเซเช•เซ‡เชก เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ€ เชตเชพเชฐเซเชคเชพ เชฒเชพเช‚เชฌเชพ เชฒเซ‰เชจเซเชš เชชเชฐ เชœเซ€เชคเซ€ เช—เชˆ

เชฌเชงเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเซ‹เชฌเชพเช‡เชฒ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธเชฎเชพเช‚ เชเชกเชชเซ€ เชฒเซ‹เช‚เชš เช…เชจเซ‡ เชชเซเชฐเชคเชฟเชญเชพเชตเชถเซ€เชฒ UI เชจเซ‡ เชฎเชพเชจเซเชฏ เชฐเชพเช–เซ‡ เช›เซ‡. เชœเซ‹ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเซ‹เชจเซเชš เชฅเชตเชพเชฎเชพเช‚ เชฒเชพเช‚เชฌเซ‹ เชธเชฎเชฏ เชฒเซ‡ เช›เซ‡, เชคเซ‹ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช‰เชฆเชพเชธเซ€ เช…เชจเซ‡ เช—เซเชธเซเชธเซ‡ เชฅเชตเชพ เชฒเชพเช—เซ‡ เช›เซ‡. เชคเชฎเซ‡ เช—เซเชฐเชพเชนเช•เชจเชพ เช…เชจเซเชญเชตเชจเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เชฌเช—เชพเชกเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชฅเชตเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‡ เชคเซ‡ เชชเชนเซ‡เชฒเชพเช‚ เชœ เชคเซ‡เชจเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช—เซเชฎเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹.

เช…เชฎเซ‡ เชเช•เชตเชพเชฐ เชถเซ‹เชงเซเชฏเซเช‚ เช•เซ‡ เชกเซ‹เชกเซ‹ เชชเชฟเชเชพ เชเชชเชจเซ‡ เชธเชฐเซ‡เชฐเชพเชถ เชฒเซ‹เชจเซเชš เชฅเชตเชพเชฎเชพเช‚ 3 เชธเซ‡เช•เชจเซเชกเชจเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซ‡ เช›เซ‡ เช…เชจเซ‡ เช•เซ‡เชŸเชฒเชพเช• "เชจเชธเซ€เชฌเชฆเชพเชฐ เชฒเซ‹เช•เซ‹" เชฎเชพเชŸเซ‡ เชคเซ‡ 15-20 เชธเซ‡เช•เชจเซเชก เชฒเซ‡ เช›เซ‡.

เช•เชŸเชจเซ€ เชจเซ€เชšเซ‡ เชธเซเช–เชฆ เช…เช‚เชค เชธเชพเชฅเซ‡เชจเซ€ เชตเชพเชฐเซเชคเชพ เช›เซ‡: เชฐเชฟเชฏเชฒเชฎ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ€ เชตเซƒเชฆเซเชงเชฟ เชตเชฟเชถเซ‡, เชฎเซ‡เชฎเชฐเซ€ เชฒเซ€เช• เชตเชฟเชถเซ‡, เช…เชฎเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชจเซ‡เชธเซเชŸเซ‡เชก เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธ เชเช•เช เชพ เช•เชฐเซเชฏเชพ, เช…เชจเซ‡ เชชเช›เซ€ เช…เชฎเชพเชฐเซ€ เชœเชพเชคเชจเซ‡ เชเช•เชธเชพเชฅเซ‡ เช–เซ‡เช‚เชšเซ€ เช…เชจเซ‡ เชฌเชงเซเช‚ เช เซ€เช• เช•เชฐเซเชฏเซเช‚.

เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฐเชฟเชฏเชฒเชฎเชฎเชพเช‚ เช•เชพเชธเซเช•เซ‡เชก เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ€ เชตเชพเชฐเซเชคเชพ เชฒเชพเช‚เชฌเชพ เชฒเซ‰เชจเซเชš เชชเชฐ เชœเซ€เชคเซ€ เช—เชˆ

เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฐเชฟเชฏเชฒเชฎเชฎเชพเช‚ เช•เชพเชธเซเช•เซ‡เชก เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ€ เชตเชพเชฐเซเชคเชพ เชฒเชพเช‚เชฌเชพ เชฒเซ‰เชจเซเชš เชชเชฐ เชœเซ€เชคเซ€ เช—เชˆ
เชฒเซ‡เช– เชฒเซ‡เช–เช•: เชฎเซ‡เช•เซเชธเชฟเชฎ เช•เชพเชšเชฟเชจเช•เซ€เชจ - เชกเซ‹เชกเซ‹ เชชเชฟเชเชพ เช–เชพเชคเซ‡ เชเชจเซเชกเซเชฐเซ‹เช‡เชก เชกเซ‡เชตเชฒเชชเชฐ.

เชเชชเซเชฒเซ€เช•เซ‡เชถเชจ เช†เชฏเช•เชจ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเชตเชพเชฅเซ€ เช“เชจเชฐเซ‡เชเซเชฏเซเชฎ() เชธเซเชงเซ€เชจเซ€ เชชเซเชฐเชฅเชฎ เชชเซเชฐเชตเซƒเชคเซเชคเชฟเชจเซ€ เชคเซเชฐเชฃ เชธเซ‡เช•เชจเซเชก เช…เชจเช‚เชค เช›เซ‡. เช…เชจเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡, เชธเซเชŸเชพเชฐเซเชŸเช…เชช เชธเชฎเชฏ 15-20 เชธเซ‡เช•เช‚เชก เชธเซเชงเซ€ เชชเชนเซ‹เช‚เชšเซเชฏเซ‹. เช† เชชเชฃ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชถเช•เซเชฏ เช›เซ‡?

เชœเซ‡เชฎเชจเซ€ เชชเชพเชธเซ‡ เชตเชพเช‚เชšเชตเชพเชจเซ‹ เชธเชฎเชฏ เชจเชฅเซ€ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡ เช–เซ‚เชฌ เชœ เชŸเซ‚เช‚เช•เซ‹ เชธเชพเชฐเชพเช‚เชถ
เช…เชฎเชพเชฐเซเช‚ เช•เซเชทเซ‡เชคเซเชฐ เชกเซ‡เชŸเชพเชฌเซ‡เช เช…เชตเชฟเชฐเชคเชชเชฃเซ‡ เชตเชงเซเชฏเซเช‚. เช•เซ‡เชŸเชฒเชพเช• เชจเซ‡เชธเซเชŸเซ‡เชก เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชจ เชนเชคเชพ, เชชเชฐเช‚เชคเซ เชธเชคเชค เชธเช‚เชšเชฟเชค เชฅเชฏเชพ เชนเชคเชพ. เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชถเชฐเซ‚ เชฅเชตเชพเชจเซ‹ เชธเชฎเชฏ เชงเซ€เชฎเซ‡ เชงเซ€เชฎเซ‡ เชตเชงเชคเซ‹ เช—เชฏเซ‹. เชชเช›เซ€ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เช เซ€เช• เช•เชฐเซเชฏเซเช‚, เช…เชจเซ‡ เชธเซเชŸเชพเชฐเซเชŸเช…เชชเชจเซ‹ เชธเชฎเชฏ เชฒเช•เซเชทเซเชฏ เชชเชฐ เช†เชตเซเชฏเซ‹ - เชคเซ‡ 1 เชธเซ‡เช•เช‚เชกเชฅเซ€ เช“เช›เซ‹ เชฅเชˆ เช—เชฏเซ‹ เช…เชจเซ‡ เชนเชตเซ‡ เชตเชงเซเชฏเซ‹ เชจเชนเซ€เช‚. เชฒเซ‡เช–เชฎเชพเช‚ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช…เชจเซ‡ เชฌเซ‡ เช‰เช•เซ‡เชฒเซ‹ เช›เซ‡ - เชเช• เชเชกเชชเซ€ เช…เชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ.

เชธเชฎเชธเซเชฏเชพเชจเซ€ เชถเซ‹เชง เช…เชจเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ

เช†เชœเซ‡, เช•เซ‹เชˆเชชเชฃ เชฎเซ‹เชฌเชพเช‡เชฒ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชเชกเชชเชฅเซ€ เชถเชฐเซ‚ เชฅเชตเซ€ เชœเซ‹เชˆเช เช…เชจเซ‡ เชชเซเชฐเชคเชฟเชญเชพเชตเชถเซ€เชฒ เชนเซ‹เชตเซ€ เชœเซ‹เชˆเช. เชชเชฐเช‚เชคเซ เชคเซ‡ เชฎเชพเชคเซเชฐ เชฎเซ‹เชฌเชพเช‡เชฒ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชตเชฟเชถเซ‡ เชจเชฅเซ€. เชธเซ‡เชตเชพ เช…เชจเซ‡ เช•เช‚เชชเชจเซ€ เชธเชพเชฅเซ‡เชจเซ€ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพเชจเซ‹ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช…เชจเซเชญเชต เช เชเช• เชœเชŸเชฟเชฒ เชฌเชพเชฌเชค เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชกเชฟเชฒเชฟเชตเชฐเซ€เชจเซ€ เชเชกเชช เช เชชเชฟเชเชพ เชธเซ‡เชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชฎเซเช–เซเชฏ เชธเซ‚เชšเช•เซ‹เชฎเชพเช‚เชจเซเช‚ เชเช• เช›เซ‡. เชœเซ‹ เชกเชฟเชฒเชฟเชตเชฐเซ€ เชเชกเชชเซ€ เช›เซ‡, เชคเซ‹ เชชเชฟเชเชพ เช—เชฐเชฎ เชฅเชถเซ‡, เช…เชจเซ‡ เชœเซ‡ เช—เซเชฐเชพเชนเช• เชนเชตเซ‡ เช–เชพเชตเชพ เชฎเชพเช‚เช—เซ‡ เช›เซ‡ เชคเซ‡เชฃเซ‡ เชตเชงเซ เชฐเชพเชน เชœเซ‹เชตเซ€ เชชเชกเชถเซ‡ เชจเชนเซ€เช‚. เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡, เชฌเชฆเชฒเชพเชฎเชพเช‚, เชเชกเชชเซ€ เชธเซ‡เชตเชพเชจเซ€ เช…เชจเซเชญเซ‚เชคเชฟ เช•เชฐเชตเซ€ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชœเซ‹ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพเชฎเชพเช‚ เชฎเชพเชคเซเชฐ 20 เชธเซ‡เช•เชจเซเชกเชจเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซ‡ เช›เซ‡, เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เชชเชฟเชเชพ เชฎเชพเชŸเซ‡ เช•เซ‡เชŸเชฒเซ‹ เชธเชฎเชฏ เชฐเชพเชน เชœเซ‹เชตเซ€ เชชเชกเชถเซ‡?

เชถเชฐเซ‚เช†เชคเชฎเชพเช‚, เช…เชฎเซ‡ เชชเซ‹เชคเซ‡ เชœ เช เชนเช•เซ€เช•เชคเชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เชนเชคเชพ เช•เซ‡ เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพเชฎเชพเช‚ เชฅเซ‹เชกเซ€ เชธเซ‡เช•เช‚เชก เชฒเชพเช—เซ€, เช…เชจเซ‡ เชชเช›เซ€ เช…เชฎเชจเซ‡ เช…เชจเซเชฏ เชธเชพเชฅเซ€เชฆเชพเชฐเซ‹เชจเซ€ เชซเชฐเชฟเชฏเชพเชฆเซ‹ เชธเชพเช‚เชญเชณเชตเชพ เชฒเชพเช—เซ€ เช•เซ‡ เชคเซ‡ เช•เซ‡เชŸเชฒเซ‹ เชธเชฎเชฏ เชฒเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เช† เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชจเซเช‚ เชธเชคเชค เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช…เชธเชฎเชฐเซเชฅ เชนเชคเชพ.

เชคเซ‡ เช•เซ‡เชŸเชฒเซ‹ เชธเชฎเชฏ เช›เซ‡? เช…เชจเซเชธเชพเชฐ Google เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ, เชœเซ‹ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ€ เช•เซ‹เชฒเซเชก เชธเซเชŸเชพเชฐเซเชŸเชฎเชพเช‚ 5 เชธเซ‡เช•เชจเซเชกเชฅเซ€ เช“เช›เซ‹ เชธเชฎเชฏ เชฒเชพเช—เซ‡ เช›เซ‡, เชคเซ‹ เชคเซ‡เชจเซ‡ "เชธเชพเชฎเชพเชจเซเชฏ เชคเชฐเซ€เช•เซ‡" เช—เชฃเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชกเซ‹เชกเซ‹ เชชเชฟเชเชพ เชเชจเซเชกเซเชฐเซ‹เช‡เชก เชเชช เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡ (เชซเชพเชฏเชฐเชฌเซ‡เชธ เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธ เช…เชจเซเชธเชพเชฐ _app_start) เช–เชพเชคเซ‡ เช เช‚เชกเซ€ เชถเชฐเซ‚เช†เชค เชธเชฐเซ‡เชฐเชพเชถ 3 เชธเซ‡เช•เชจเซเชกเชฎเชพเช‚ - "เชฎเชนเชพเชจ เชจเชฅเซ€, เชญเชฏเช‚เช•เชฐ เชจเชฅเซ€," เชœเซ‡เชฎ เชคเซ‡เช“ เช•เชนเซ‡ เช›เซ‡.

เชชเชฐเช‚เชคเซ เชชเช›เซ€ เชซเชฐเชฟเชฏเชพเชฆเซ‹ เชฆเซ‡เช–เชพเชตเชพ เชฒเชพเช—เซ€ เช•เซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพเชฎเชพเช‚ เช–เซ‚เชฌ เชœ, เช–เซ‚เชฌ เชœ เชฒเชพเช‚เชฌเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซเชฏเซ‹! เชถเชฐเซ‚เช†เชคเชฎเชพเช‚, เช…เชฎเซ‡ "เช–เซ‚เชฌ, เช–เซ‚เชฌ, เช–เซ‚เชฌ เชฒเชพเช‚เชฌเซ" เชถเซเช‚ เช›เซ‡ เชคเซ‡ เชฎเชพเชชเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚. เช…เชจเซ‡ เช…เชฎเซ‡ เช† เชฎเชพเชŸเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซเชฐเซ‡เชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชชเซเชฐเชพเชฐเช‚เชญ เชŸเซเชฐเซ‡เชธ.

เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฐเชฟเชฏเชฒเชฎเชฎเชพเช‚ เช•เชพเชธเซเช•เซ‡เชก เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ€ เชตเชพเชฐเซเชคเชพ เชฒเชพเช‚เชฌเชพ เชฒเซ‰เชจเซเชš เชชเชฐ เชœเซ€เชคเซ€ เช—เชˆ

เช† เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชŸเซเชฐเซ‡เชธ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช–เซ‹เชฒเซ‡ เชคเซ‡ เช•เซเชทเชฃ เช…เชจเซ‡ เชชเซเชฐเชฅเชฎ เชชเซเชฐเชตเซƒเชคเซเชคเชฟเชจเซ€ onResume() เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เชฅเชพเชฏ เชคเซ‡ เช•เซเชทเชฃ เชตเชšเซเชšเซ‡เชจเชพ เชธเชฎเชฏเชจเซ‡ เชฎเชพเชชเซ‡ เช›เซ‡. เชซเชพเชฏเชฐเชฌเซ‡เช เช•เชจเซเชธเซ‹เชฒเชฎเชพเช‚ เช† เชฎเซ‡เชŸเซเชฐเชฟเช•เชจเซ‡ _app_start เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชคเซ‡ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚ เช›เซ‡ เช•เซ‡:

  • เชธเชฐเซ‡เชฐเชพเชถ เช•เซ‹เชฒเซเชก เชธเซเชŸเชพเชฐเซเชŸเช…เชช เชธเชฎเชฏ 95 เชธเซ‡เช•เชจเซเชกเชฅเซ€ เช“เช›เซ‹ เชนเซ‹เชตเชพ เช›เชคเชพเช‚, 20เชฎเซ€ เชชเชฐเซเชธเซ‡เชจเซเชŸเชพเช‡เชฒเชฅเซ€ เช‰เชชเชฐเชจเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡ เชธเซเชŸเชพเชฐเซเชŸเช…เชช เชธเชฎเชฏ เชฒเช—เชญเช— 5 เชธเซ‡เช•เชจเซเชก (เช•เซ‡เชŸเชฒเชพเช• เชตเชงเซ เชฒเชพเช‚เชฌเซ‹) เช›เซ‡.
  • เชธเซเชŸเชพเชฐเซเชŸเช…เชช เชธเชฎเชฏ เช เชธเชคเชค เชฎเซ‚เชฒเซเชฏ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชธเชฎเชฏ เชธเชพเชฅเซ‡ เชตเชงเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชŸเซ€เชชเชพเช‚ เชนเซ‹เชฏ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เช…เชฎเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฃเชจเซ‹ เชธเซเช•เซ‡เชฒ เชตเชงเชพเชฐเซ€เชจเซ‡ 90 เชฆเชฟเชตเชธ เช•เชฐเซเชฏเซ‹ เชคเซเชฏเชพเชฐเซ‡ เช…เชฎเชจเซ‡ เช† เชชเซ‡เชŸเชฐเซเชจ เชฎเชณเซ€.

เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฐเชฟเชฏเชฒเชฎเชฎเชพเช‚ เช•เชพเชธเซเช•เซ‡เชก เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ€ เชตเชพเชฐเซเชคเชพ เชฒเชพเช‚เชฌเชพ เชฒเซ‰เชจเซเชš เชชเชฐ เชœเซ€เชคเซ€ เช—เชˆ

เชฎเชจเชฎเชพเช‚ เชฌเซ‡ เชตเชฟเชšเชพเชฐเซ‹ เช†เชตเซเชฏเชพ:

  1. เช•เช‚เชˆเช• เชฒเซ€เช• เชฅเชˆ เชฐเชนเซเชฏเซเช‚ เช›เซ‡.
  2. เช† "เช•เช‚เชˆเช•" เชชเซเชฐเช•เชพเชถเชจ เชชเช›เซ€ เชฐเซ€เชธเซ‡เชŸ เชฅเชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชชเช›เซ€ เชซเชฐเซ€เชฅเซ€ เชฒเซ€เช• เชฅเชพเชฏ เช›เซ‡.

"เช•เชฆเชพเชš เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชพเชฅเซ‡ เช•เช‚เชˆเช•," เช…เชฎเซ‡ เชตเชฟเชšเชพเชฐเซเชฏเซเช‚, เช…เชจเซ‡ เช…เชฎเซ‡ เชธเชพเชšเชพ เชนเชคเชพ. เชธเซŒเชชเซเชฐเชฅเชฎ, เช…เชฎเซ‡ เช•เซ‡เชถ เชคเชฐเซ€เช•เซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช; เชธเซเชฅเชณเชพเช‚เชคเชฐ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชธเชพเชซ เช•เชฐเซ€เช เช›เซ€เช. เชฌเซ€เชœเซเช‚, เชœเซเชฏเชพเชฐเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡ เชคเซเชฏเชพเชฐเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชฒเซ‹เชก เชฅเชพเชฏ เช›เซ‡. เชฌเชงเซเช‚ เชเช•เชธเชพเชฅเซ‡ เชฌเช‚เชงเชฌเซ‡เชธเซ‡ เช›เซ‡.

Realm เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชถเซเช‚ เช–เซ‹เชŸเซเช‚ เช›เซ‡

เช…เชฎเซ‡ เชคเชชเชพเชธเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซเชฏเซเช‚ เช•เซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เชชเซเชฐเชฅเชฎ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจเชฅเซ€ เช…เชจเซ‡ เชธเช•เซเชฐเชฟเชฏ เช‰เชชเชฏเซ‹เช— เชฆเชฐเชฎเชฟเชฏเชพเชจ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เชœเซ€เชตเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฌเชฆเชฒเชพเชฏ เช›เซ‡. เชคเชฎเซ‡ เชฐเชฟเชฏเชฒเชฎ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€เช“ เชฆเซเชตเชพเชฐเชพ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ เชธเซเชŸเซ‡เชฅเซ‹ เช…เชฅเชตเชพ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เช…เชจเซ‡ เชธเซเชชเชทเซเชŸ เชฐเซ€เชคเซ‡ เชซเชพเช‡เชฒ เช–เซ‹เชฒเซ€เชจเซ‡ เช•เซเชทเซ‡เชคเซเชฐ เชธเซเชŸเซเชกเชฟเชฏเซ‹. ADB เชฆเซเชตเชพเชฐเชพ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡, Realm เชกเซ‡เชŸเชพเชฌเซ‡เช เชซเชพเช‡เชฒเชจเซ€ เชจเช•เชฒ เช•เชฐเซ‹:

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

เช…เชฒเช—-เช…เชฒเช— เชธเชฎเชฏเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€เช“ เชœเซ‹เชฏเชพ เชชเช›เซ€, เช…เชฎเชจเซ‡ เชœเชพเชฃเชตเชพ เชฎเชณเซเชฏเซเช‚ เช•เซ‡ เชšเซ‹เช•เซเช•เชธ เชชเซเชฐเช•เชพเชฐเชจเซ€ เชตเชธเซเชคเซเช“เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชธเชคเชค เชตเชงเซ€ เชฐเชนเซ€ เช›เซ‡.

เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฐเชฟเชฏเชฒเชฎเชฎเชพเช‚ เช•เชพเชธเซเช•เซ‡เชก เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ€ เชตเชพเชฐเซเชคเชพ เชฒเชพเช‚เชฌเชพ เชฒเซ‰เชจเซเชš เชชเชฐ เชœเซ€เชคเซ€ เช—เชˆ
เชšเชฟเชคเซเชฐ เชฌเซ‡ เชซเชพเช‡เชฒเซ‹ เชฎเชพเชŸเซ‡ เชฐเชฟเชฏเชฒเชฎ เชธเซเชŸเซเชกเชฟเชฏเซ‹เชจเซ‹ เชŸเซเช•เชกเซ‹ เชฌเชคเชพเชตเซ‡ เช›เซ‡: เชกเชพเชฌเซ€ เชฌเชพเชœเซเช - เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชชเช›เซ€ เชฅเซ‹เชกเชพ เชธเชฎเชฏ เชชเช›เซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‹ เช†เชงเชพเชฐ, เชœเชฎเชฃเซ€ เชฌเชพเชœเซเช - เชธเช•เซเชฐเชฟเชฏ เช‰เชชเชฏเซ‹เช— เชชเช›เซ€. เชคเซ‡ เชœเซ‹เชˆ เชถเช•เชพเชฏ เช›เซ‡ เช•เซ‡ เชตเชธเซเชคเซเช“เชจเซ€ เชธเช‚เช–เซเชฏเชพ ImageEntity ะธ MoneyType เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ เชตเซƒเชฆเซเชงเชฟ เชชเชพเชฎเซ€ เช›เซ‡ (เชธเซเช•เซเชฐเซ€เชจเชถเซ‹เชŸ เชฆเชฐเซ‡เช• เชชเซเชฐเช•เชพเชฐเชจเซ€ เชตเชธเซเชคเซเช“เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชฌเชคเชพเชตเซ‡ เช›เซ‡).

เชกเซ‡เชŸเชพเชฌเซ‡เช เชตเซƒเชฆเซเชงเชฟ เช…เชจเซ‡ เชธเซเชŸเชพเชฐเซเชŸเช…เชช เชธเชฎเชฏ เชตเชšเซเชšเซ‡เชจเซ‹ เชธเช‚เชฌเช‚เชง

เช…เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เชกเซ‡เชŸเชพเชฌเซ‡เช เชตเซƒเชฆเซเชงเชฟ เช–เซ‚เชฌ เชœ เช–เชฐเชพเชฌ เช›เซ‡. เชชเชฐเช‚เชคเซ เช† เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเซเชŸเชพเชฐเซเชŸเช…เชช เชธเชฎเชฏเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช…เชธเชฐ เช•เชฐเซ‡ เช›เซ‡? เชเช•เซเชŸเชฟเชตเชฟเชŸเซ€ เชฎเซ‡เชจเซ‡เชœเชฐ เชฆเซเชตเชพเชฐเชพ เช†เชจเซ‡ เชฎเชพเชชเชตเซเช‚ เชเช•เชฆเชฎ เชธเชฐเชณ เช›เซ‡. เชเชจเซเชกเซเชฐเซ‹เช‡เชก 4.4 เชฅเซ€, logcat เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชธเซเชŸเซเชฐเชฟเช‚เช— เช…เชจเซ‡ เชธเชฎเชฏ เชธเชพเชฅเซ‡ เชฒเซ‹เช— เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡. เช† เชธเชฎเชฏ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเซ‰เชจเซเชš เชฅเชฏเชพเชจเซ€ เช•เซเชทเชฃเชฅเซ€ เชชเซเชฐเชตเซƒเชคเซเชคเชฟ เชฐเซ‡เชจเซเชกเชฐเชฟเช‚เช—เชจเชพ เช…เช‚เชค เชธเซเชงเซ€เชจเชพ เช…เช‚เชคเชฐเชพเชฒเชจเซ€ เชฌเชฐเชพเชฌเชฐ เช›เซ‡. เช† เชธเชฎเชฏ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชจเซ€เชšเซ‡เชจเซ€ เช˜เชŸเชจเชพเช“ เชฅเชพเชฏ เช›เซ‡:

  • เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชถเชฐเซ‚ เช•เชฐเซ‹.
  • เช‘เชฌเซเชœเซ‡เช•เซเชŸเชจเซ€ เชถเชฐเซ‚เช†เชค.
  • เชชเซเชฐเชตเซƒเชคเซเชคเชฟเช“เชจเซ€ เชฐเชšเชจเชพ เช…เชจเซ‡ เชชเซเชฐเชพเชฐเช‚เชญ.
  • เชฒเซ‡เช†เช‰เชŸ เชฌเชจเชพเชตเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡.
  • เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฐเซ‡เชจเซเชกเชฐเซ€เช‚เช—.

เช…เชฎเชจเซ‡ เช…เชจเซเช•เซ‚เชณ. เชœเซ‹ เชคเชฎเซ‡ -S เช…เชจเซ‡ -W เชซเซเชฒเซ‡เช— เชธเชพเชฅเซ‡ ADB เชšเชฒเชพเชตเซ‹ เช›เซ‹, เชคเซ‹ เชคเชฎเซ‡ เชธเซเชŸเชพเชฐเซเชŸเช…เชช เชธเชฎเชฏ เชธเชพเชฅเซ‡ เชตเชฟเชธเซเชคเซƒเชค เช†เช‰เชŸเชชเซเชŸ เชฎเซ‡เชณเชตเซ€ เชถเช•เซ‹ เช›เซ‹:

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

เชœเซ‹ เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เชคเซเชฏเชพเช‚เชฅเซ€ เชชเช•เชกเซ‹ grep -i WaitTime เชธเชฎเชฏ, เชคเชฎเซ‡ เช† เชฎเซ‡เชŸเซเชฐเชฟเช•เชจเชพ เชธเช‚เช—เซเชฐเชนเชจเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‡ เชฆเซƒเชทเซเชŸเชฟเชจเซ€ เชฐเซ€เชคเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹. เชจเซ€เชšเซ‡เชจเซ‹ เช—เซเชฐเชพเชซ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจเชจเซ€ เชถเชฐเซ‚เช†เชคเชจเชพ เชธเชฎเชฏเชจเซ€ เช•เซ‹เชฒเซเชก เชธเซเชŸเชพเชฐเซเชŸเซเชธเชจเซ€ เชธเช‚เช–เซเชฏเชพ เชชเชฐ เชจเชฟเชฐเซเชญเชฐเชคเชพ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡.

เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฐเชฟเชฏเชฒเชฎเชฎเชพเช‚ เช•เชพเชธเซเช•เซ‡เชก เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ€ เชตเชพเชฐเซเชคเชพ เชฒเชพเช‚เชฌเชพ เชฒเซ‰เชจเซเชš เชชเชฐ เชœเซ€เชคเซ€ เช—เชˆ

เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเชพ เช•เชฆ เช…เชจเซ‡ เชตเซƒเชฆเซเชงเชฟ เชตเชšเซเชšเซ‡เชจเชพ เชธเช‚เชฌเช‚เชงเชจเซ€ เชธเชฎเชพเชจ เชชเซเชฐเช•เซƒเชคเชฟ เชนเชคเซ€, เชœเซ‡ 4 MB เชฅเซ€ 15 MB เชธเซเชงเซ€ เชตเชงเซ€ เชนเชคเซ€. เช•เซเชฒ เชฎเชณเซ€เชจเซ‡, เชคเซ‡ เชคเชพเชฐเชฃ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ เชธเชฎเชฏ เชœเชคเชพเช‚ (เช เช‚เชกเชพเชจเซ€ เชถเชฐเซ‚เช†เชคเชจเซ€ เชตเซƒเชฆเซเชงเชฟ เชธเชพเชฅเซ‡), เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเซ‹เช‚เชš เชฅเชตเชพเชจเซ‹ เชธเชฎเชฏ เช…เชจเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซเช‚ เช•เชฆ เชฌเช‚เชจเซ‡เชฎเชพเช‚ เชตเชงเชพเชฐเซ‹ เชฅเชฏเซ‹ เช›เซ‡. เช…เชฎเชพเชฐเชพ เชนเชพเชฅ เชชเชฐ เชเช• เชชเซ‚เชฐเซเชตเชงเชพเชฐเชฃเชพ เช›เซ‡. เชนเชตเซ‡ เชœเซ‡ เชฌเชพเช•เซ€ เชนเชคเซเช‚ เชคเซ‡ เช…เชตเชฒเช‚เชฌเชจเชจเซ€ เชชเซเชทเซเชŸเชฟ เช•เชฐเชตเชพเชจเซเช‚ เชนเชคเซเช‚. เชคเซ‡เชฅเซ€, เช…เชฎเซ‡ "เชฒเซ€เช•เซเชธ" เชฆเซ‚เชฐ เช•เชฐเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช…เชจเซ‡ เชœเซเช“ เช•เซ‡ เชถเซเช‚ เช†เชจเชพเชฅเซ€ เชฒเซ‹เช‚เชšเชจเซ‡ เชตเซ‡เช— เชฎเชณเชถเซ‡.

เช…เชจเช‚เชค เชกเซ‡เชŸเชพเชฌเซ‡เช เชตเซƒเชฆเซเชงเชฟ เชฎเชพเชŸเซ‡เชจเชพเช‚ เช•เชพเชฐเชฃเซ‹

"เชฒเซ€เช•เซเชธ" เชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ, เชคเซ‡ เชธเชฎเชœเชตเซเช‚ เชฏเซ‹เช—เซเชฏ เช›เซ‡ เช•เซ‡ เชคเซ‡เช“ เชถเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเชฅเชฎ เชธเซเชฅเชพเชจเซ‡ เชฆเซ‡เช–เชพเชฏเชพ. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชšเชพเชฒเซ‹ เชฏเชพเชฆ เช•เชฐเซ€เช เช•เซ‡ เช•เซเชทเซ‡เชคเซเชฐ เชถเซเช‚ เช›เซ‡.

เช•เซเชทเซ‡เชคเซเชฐ เช เชฌเชฟเชจ-เชธเช‚เชฌเช‚เชงเชฟเชค เชกเซ‡เชŸเชพเชฌเซ‡เช เช›เซ‡. เชคเซ‡ เชคเชฎเชจเซ‡ เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธ เชตเชšเซเชšเซ‡เชจเชพ เชธเช‚เชฌเช‚เชงเซ‹เชจเซ‡ Android เชชเชฐ เช•เซ‡เชŸเชฒเชพ ORM เชฐเชฟเชฒเซ‡เชถเชจเชฒ เชกเซ‡เชŸเชพเชฌเซ‡เชธเซ‡เชธ เชตเชฐเซเชฃเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡ เชคเซ‡ เชœ เชฐเซ€เชคเซ‡ เชตเชฐเซเชฃเชตเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, เชฐเชฟเชฏเชฒเชฎ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฃเซ‹ เช…เชจเซ‡ เชฎเซ‡เชชเชฟเช‚เช—เซเชธ เชธเชพเชฅเซ‡ เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธเชจเซ‡ เชธเซ€เชงเซ€ เชฎเซ‡เชฎเชฐเซ€เชฎเชพเช‚ เชธเซเชŸเซ‹เชฐ เช•เชฐเซ‡ เช›เซ‡. เช† เชคเชฎเชจเซ‡ เชกเชฟเชธเซเช•เชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพเชจเซ‡ เช–เซ‚เชฌ เชœ เชเชกเชชเชฅเซ€ เชตเชพเช‚เชšเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡, เชœเซ‡ เช•เซเชทเซ‡เชคเซเชฐเชจเซ€ เชถเช•เซเชคเชฟ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เชถเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเชฟเชฏ เช›เซ‡.

(เช† เชฒเซ‡เช–เชจเชพ เชนเซ‡เชคเซเช“ เชฎเชพเชŸเซ‡, เช† เชตเชฐเซเชฃเชจ เช…เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเซเช‚ เชนเชถเซ‡. เชคเชฎเซ‡ เช•เซ‚เชฒเชฎเชพเช‚ เช•เซเชทเซ‡เชคเซเชฐ เชตเชฟเชถเซ‡ เชตเชงเซ เชตเชพเช‚เชšเซ€ เชถเช•เซ‹ เช›เซ‹ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เช…เชฅเชตเชพ เชคเซ‡เชฎเชจเชพเชฎเชพเช‚ เช…เช•เชพเชฆเชฎเซ€).

เช˜เชฃเชพ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชฐเชฟเชฒเซ‡เชถเชจเชฒ เชกเซ‡เชŸเชพเชฌเซ‡เชธเซ‡เชธ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชนเซ‚เชก เชนเซ‡เช เชณ SQL เชธเชพเชฅเซ‡ ORM เชกเซ‡เชŸเชพเชฌเซ‡เชธเซ‡เชธ) เชธเชพเชฅเซ‡ เชตเชงเซ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชŸเซ‡เชตเชพเชฏเซ‡เชฒเชพ เช›เซ‡. เช…เชจเซ‡ เช•เชพเชธเซเช•เซ‡เชกเชฟเช‚เช— เชกเซ‡เชŸเชพ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพ เชœเซ‡เชตเซ€ เชตเชธเซเชคเซเช“ เช˜เชฃเซ€เชตเชพเชฐ เช†เชชเซ‡เชฒ เชœเซ‡เชตเซ€ เชฒเชพเช—เซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เช•เซเชทเซ‡เชคเซเชฐเชฎเชพเช‚ เชจเชนเซ€เช‚.

เชฎเชพเชฐเซเช— เชฆเซเชตเชพเชฐเชพ, เช•เชพเชธเซเช•เซ‡เชก เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ€ เชธเซเชตเชฟเชงเชพเชจเซ‡ เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏเชฅเซ€ เชชเซ‚เช›เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช† เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ ะธ เช…เชจเซเชฏ, เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชธเช‚เช•เชณเชพเชฏเซ‡เชฒ, เชธเช•เซเชฐเชฟเชฏเชชเชฃเซ‡ เชšเชฐเซเชšเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€. เชเชตเซ€ เชฒเชพเช—เชฃเซ€ เชนเชคเซ€ เช•เซ‡ เชคเซ‡ เชŸเซ‚เช‚เช• เชธเชฎเชฏเชฎเชพเช‚ เชชเซ‚เชฐเซเชฃ เชฅเชถเซ‡. เชชเชฐเช‚เชคเซ เชชเช›เซ€ เชฌเชงเซเช‚ เชœ เชฎเชœเชฌเซ‚เชค เช…เชจเซ‡ เชจเชฌเชณเชพ เชฒเชฟเช‚เช•เซเชธเชจเซ€ เชฐเชœเซ‚เช†เชคเชฎเชพเช‚ เช…เชจเซเชตเชพเชฆเชฟเชค เชฅเชพเชฏ เช›เซ‡, เชœเซ‡ เช† เชธเชฎเชธเซเชฏเชพเชจเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เชนเชฒ เช•เชฐเชถเซ‡. เช† เช•เชพเชฐเซเชฏเชฎเชพเช‚ เช–เซ‚เชฌ เชœ เชœเซ€เชตเช‚เชค เช…เชจเซ‡ เชธเช•เซเชฐเชฟเชฏ เชนเชคเชพ เช–เซ‡เช‚เชšเชตเชพเชจเซ€ เชตเชฟเชจเช‚เชคเซ€, เชœเซ‡ เช†เช‚เชคเชฐเชฟเช• เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“เชจเชพ เช•เชพเชฐเชฃเซ‡ เชนเชพเชฒ เชฎเชพเชŸเซ‡ เชฅเซ‹เชญเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡.

เช•เชพเชธเซเช•เซ‡เชกเชฟเช‚เช— เช•เชพเชขเซ€ เชจเชพเช–เซเชฏเชพ เชตเชฟเชจเชพ เชกเซ‡เชŸเชพ เชฒเซ€เช•

เชœเซ‹ เชคเชฎเซ‡ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เชจ เชนเซ‹เชฏ เชคเซ‡เชตเชพ เช•เชพเชธเซเช•เซ‡เชกเชฟเช‚เช— เชกเชฟเชฒเซ€เชŸ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เชคเชพ เชนเซ‹เชต เชคเซ‹ เชกเซ‡เชŸเชพ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเซ€เช• เชฅเชพเชฏ เช›เซ‡? เชœเซ‹ เชคเชฎเซ‡ Realm เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธ เชจเซ‡เชธเซเชŸเซ‡เชก เช•เชฐเซเชฏเชพ เช›เซ‡, เชคเซ‹ เชชเช›เซ€ เชคเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพ เชœเซ‹เชˆเช.
เชšเชพเชฒเซ‹ เชเช• (เชฒเช—เชญเช—) เชตเชพเชธเซเชคเชตเชฟเช• เช‰เชฆเชพเชนเชฐเชฃ เชœเซ‹เชˆเช. เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชเช• เชชเชฆเชพเชฐเซเชฅ เช›เซ‡ 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()) เชฆเชพเช–เชฒ เช•เชฐเซ€เช, เชคเซ‹ เช† เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช“เชตเชฐเชฐเชพเชˆเชŸ เชฅเชˆ เชœเชถเซ‡. เชชเชฐเช‚เชคเซ เชคเชฎเชพเชฎ เช†เช‚เชคเชฐเชฟเช• เชตเชธเซเชคเซเช“ (เช‡เชฎเซ‡เชœ, เช•เชธเซเชŸเชฎเชพเช‡เชเซ‡เชถเชจ เชเชจเซเชŸเชฟเชŸเซ€ เช…เชจเซ‡ เช•เชพเชฐเซเชŸเช•เซ‹เชฎเซเชฌเซ‹ เชชเซเชฐเซ‹เชกเช•เซเชŸเซเชธ) เชฎเชพเชคเชพเชชเชฟเชคเชพ เชธเชพเชฅเซ‡เชจเซเช‚ เชœเซ‹เชกเชพเชฃ เช—เซเชฎเชพเชตเชถเซ‡ เช…เชจเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชฐเชนเซ‡เชถเซ‡.

เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡เชจเซเช‚ เช•เชจเซ‡เช•เซเชถเชจ เชคเซ‚เชŸเซ€ เช—เชฏเซเช‚ เชนเซ‹เชตเชพเชฅเซ€, เช…เชฎเซ‡ เชคเซ‡เชฎเชจเซ‡ เชนเชตเซ‡ เชตเชพเช‚เชšเซ€เชถเซเช‚ เชจเชนเซ€เช‚ เช…เชฅเชตเชพ เช•เชพเชขเซ€ เชจเชพเช–เซ€เชถเซเช‚ เชจเชนเซ€เช‚ (เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เช…เชฎเซ‡ เชคเซ‡เชฎเชจเซ‡ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เชเช•เซเชธเซ‡เชธ เชจเชนเซ€เช‚ เช•เชฐเซ€เช เช…เชฅเชตเชพ เชธเช‚เชชเซ‚เชฐเซเชฃ "เชŸเซ‡เชฌเชฒ" เชธเชพเชซ เชจเชนเซ€เช‚ เช•เชฐเซ€เช). เช…เชฎเซ‡ เช†เชจเซ‡ "เชฎเซ‡เชฎเชฐเซ€ เชฒเชฟเช•" เช•เชนเซ€เช เช›เซ€เช.

เชœเซเชฏเชพเชฐเซ‡ เช†เชชเชฃเซ‡ เช•เซเชทเซ‡เชคเซเชฐ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ€เช เช›เซ€เช, เชคเซเชฏเชพเชฐเซ‡ เช†เชชเชฃเซ‡ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เชคเชฎเชพเชฎ เช˜เชŸเช•เซ‹เชฎเชพเช‚เชฅเซ€ เชชเชธเชพเชฐ เชฅเชตเซเช‚ เชœเซ‹เชˆเช เช…เชจเซ‡ เช†เชตเชพ เช“เชชเชฐเซ‡เชถเชจเซเชธ เชชเชนเซ‡เชฒเชพเช‚ เชฌเชงเซเช‚ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เชตเซเช‚ เชœเซ‹เชˆเช. เช† เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช†เชจเซ€ เชœเซ‡เชฎ:

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)

เชœเซ‹ เช•เซเชทเซ‡เชคเซเชฐ เช RealmModel เช…เชฅเชตเชพ RealmList เช›เซ‡, เชคเซ‹ เชชเช›เซ€ เช† เช•เซเชทเซ‡เชคเซเชฐเชจเชพ เช‘เชฌเซเชœเซ‡เช•เซเชŸเชจเซ‡ เชจเซ‡เชธเซเชŸเซ‡เชก เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธเชจเซ€ เชธเซ‚เชšเชฟเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ‹. เชฌเชงเซเช‚ เชฌเชฐเชพเชฌเชฐ เช เชœ เช›เซ‡ เชœเซ‡เชฎ เช†เชชเชฃเซ‡ เช‰เชชเชฐ เช•เชฐเซเชฏเซเช‚ เช›เซ‡, เชซเช•เซเชค เช…เชนเซ€เช‚ เชคเซ‡ เชœเชพเชคเซ‡ เชœ เชฅเชถเซ‡. เช•เชพเชธเซเช•เซ‡เชก เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ€ เชชเชฆเซเชงเชคเชฟ เชชเซ‹เชคเซ‡ เช–เซ‚เชฌ เชœ เชธเชฐเชณ เช›เซ‡ เช…เชจเซ‡ เช†เชจเชพ เชœเซ‡เชตเซ€ เชฒเชพเช—เซ‡ เช›เซ‡:

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, เช•เชพเชฐเชฃ เช•เซ‡ เชเชตเซเช‚ เชฌเชจเซ€ เชถเช•เซ‡ เช›เซ‡ เช•เซ‡ เช…เชฒเช—-เช…เชฒเช— เชชเซ‡เชฐเซ‡เชจเซเชŸ เช‘เชฌเซเชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชธเชฎเชพเชจ เชจเซ‡เชธเซเชŸเซ‡เชก เชนเซ‹เชฏ เชถเช•เซ‡ เช›เซ‡. เช†เชจเซ‡ เชŸเชพเชณเชตเซเช‚ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชจเชตเชพ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡ id เชจเซ€ เช‘เชŸเซ‹-เชœเชจเชฐเซ‡เชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹.

เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฐเชฟเชฏเชฒเชฎเชฎเชพเช‚ เช•เชพเชธเซเช•เซ‡เชก เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ€ เชตเชพเชฐเซเชคเชพ เชฒเชพเช‚เชฌเชพ เชฒเซ‰เชจเซเชš เชชเชฐ เชœเซ€เชคเซ€ เช—เชˆ

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 เชธเซ‡เช•เชจเซเชกเชฅเซ€ เช“เช›เซ€ เช›เซ‡.

เชคเซ‡ เช‰เชฎเซ‡เชฐเชตเซเช‚ เชชเชฃ เชฏเซ‹เช—เซเชฏ เช›เซ‡ เช•เซ‡ เชกเชฟเชซเซ‰เชฒเซเชŸ เชฐเซ‚เชชเซ‡, เชœเซ‹ _app_start เชจเซเช‚ เชธเชฐเซ‡เชฐเชพเชถ เชฎเซ‚เชฒเซเชฏ 5 เชธเซ‡เช•เชจเซเชก เช•เชฐเชคเชพเช‚ เชตเชงเซ€ เชœเชพเชฏ เชคเซ‹ Firebase เชธเซ‚เชšเชจเชพเช“ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡. เชœเซ‹ เช•เซ‡, เชœเซ‡เชฎ เช†เชชเชฃเซ‡ เชœเซ‹เชˆ เชถเช•เซ€เช เช›เซ€เช, เชคเชฎเชพเชฐเซ‡ เช†เชจเชพ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เชตเซ‹ เชœเซ‹เชˆเช เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เช…เช‚เชฆเชฐ เชœเชพเช“ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เชคเชชเชพเชธเซ‹.

เชฐเชฟเชฏเชฒเชฎ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ€ เช–เชพเชธ เชตเชพเชค เช เช›เซ‡ เช•เซ‡ เชคเซ‡ เชจเซ‹เชจ-เชฐเชฟเชฒเซ‡เชถเชจเชฒ เชกเซ‡เชŸเชพเชฌเซ‡เช เช›เซ‡. เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชธเชฐเชณเชคเชพ, ORM เชธเซ‹เชฒเซเชฏเซเชถเชจเซเชธ เช…เชจเซ‡ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชฒเชฟเช‚เช•เชฟเช‚เช—เชจเซ€ เชธเชฎเชพเชจเชคเชพ เชนเซ‹เชตเชพ เช›เชคเชพเช‚, เชคเซ‡เชฎเชพเช‚ เช•เชพเชธเซเช•เซ‡เชก เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเชคเซเช‚ เชจเชฅเซ€.

เชœเซ‹ เช†เชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชตเชพเชฎเชพเช‚ เชจเชนเซ€เช‚ เช†เชตเซ‡, เชคเซ‹ เชจเซ‡เชธเซเชŸเซ‡เชก เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธ เชเช•เช เชพ เชฅเชถเซ‡ เช…เชจเซ‡ "เชฒเซ€เช• เชฅเชˆ เชœเชถเซ‡." เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชคเชค เชตเชงเชถเซ‡, เชœเซ‡ เชฌเชฆเชฒเชพเชฎเชพเช‚ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เชฎเช‚เชฆเซ€ เช…เชฅเชตเชพ เชธเซเชŸเชพเชฐเซเชŸเช…เชชเชจเซ‡ เช…เชธเชฐ เช•เชฐเชถเซ‡.

เชฎเซ‡เช‚ เชฐเชฟเชฏเชฒเชฎเชฎเชพเช‚ เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธเชจเซ‡ เชเชกเชชเชฅเซ€ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชธเซเช•เซ‡เชก เชกเชฟเชฒเซ€เชŸ เช•เชฐเชตเซเช‚ เชคเซ‡ เช…เช‚เช—เซ‡เชจเซ‹ เช…เชฎเชพเชฐเซ‹ เช…เชจเซเชญเชต เชถเซ‡เชฐ เช•เชฐเซเชฏเซ‹, เชœเซ‡ เชนเชœเซ€ เชธเซเชงเซ€ เชฌเซ‹เช•เซเชธเชจเซ€ เชฌเชนเชพเชฐ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏเชฅเซ€ เชคเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซ€ เช›เซ‡. เชคเซ‡เช“ เช•เชนเซ‡ เช›เซ‡ ะธ เชคเซ‡เช“ เช•เชนเซ‡ เช›เซ‡. เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช†เชจเชพเชฅเซ€ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจ เชธเซเชŸเชพเชฐเซเชŸเช…เชชเชจเซ‹ เชธเชฎเชฏ เช–เซ‚เชฌ เชœ เชเชกเชชเซ€ เชฌเชจเซเชฏเซ‹.

เช† เชธเซเชตเชฟเชงเชพเชจเชพ เชจเชฟเช•เชŸเชตเชฐเซเชคเซ€ เชฆเซ‡เช–เชพเชต เชตเชฟเชถเซ‡ เชšเชฐเซเชšเชพ เชนเซ‹เชตเชพ เช›เชคเชพเช‚, เช•เซเชทเซ‡เชคเซเชฐเชฎเชพเช‚ เช•เชพเชธเซเช•เซ‡เชก เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ€ เช—เซ‡เชฐเชนเชพเชœเชฐเซ€ เชกเชฟเชเชพเช‡เชจ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชœเซ‹ เชคเชฎเซ‡ เชจเชตเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชกเชฟเชเชพเช‡เชจ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‹, เชคเซ‹ เช†เชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‹. เช…เชจเซ‡ เชœเซ‹ เชคเชฎเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ Realm เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‹, เชคเซ‹ เชคเชชเชพเชธเซ‹ เช•เซ‡ เชคเชฎเชจเซ‡ เช†เชตเซ€ เชธเชฎเชธเซเชฏเชพเช“ เช›เซ‡ เช•เซ‡ เชจเชนเซ€เช‚.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹