æšæºã¢ã¯ãã£ããã£ããã³AsyncTaskããRxJavaã䜿çšããææ°ã®MVPã¢ãŒããã¯ãã£ãžã®æ
ã
ãããžã§ã¯ãã³ãŒãã¯ãçžäºã«æ©èœããã¡ã«ããºã ãšããŠæ©èœããç¬ç«ããã¢ãžã¥ãŒã«ã«åå²ããå¿
èŠããããŸãïŒ Chester Alvarezã®åçïŒãAndroidçšéçºããŒã«ã®ãšã³ã·ã¹ãã ã¯éåžžã«é«éã«éçºãããŠããŸãã æ¯é±ã誰ããæ°ããããŒã«ãäœæããæ¢åã®ã©ã€ãã©ãªãæŽæ°ããæ°ããèšäºãæžãããã¬ãŒã³ããŒã·ã§ã³ãè¡ããŸãã 1ãæéäŒæãåããåž°åœãããŸã§ã«ããµããŒãã©ã€ãã©ãªããã³/ãŸãã¯Google Playéçºè
ãµãŒãã¹ã®ææ°ããŒãžã§ã³ãæ¢ã«å
¬éãããŠããŸãã
éå»3幎éã
ãªããã Androidã¢ããªã±ãŒã·ã§ã³ãéçºããŠããŸããããã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ãšäœ¿çšãããã¯ãããžãŒã®äž¡æ¹ãåžžã«é²åããæ¹åãããŠããŸããã ãã®èšäºã§ã¯ãç§ãã¡ãåŠãã éãç§ãã¡ãåŠãã æèšãç§ãã¡ãç¯ããééããããã³ããããã¹ãŠã®ã¢ãŒããã¯ãã£ã®å€æŽã«ã€ãªãã£ãæšè«ã瀺ããŸãã
å€ãè¯ãæä»£
2012幎ããããžã§ã¯ãã®æ§é ã¯éåžžã«ã·ã³ãã«ã«èŠããŸããã ãããã¯ãŒã¯ã©ã€ãã©ãªã¯ãããŸããã§ãããã
AsyncTask
ã¯åŒãç¶ãå人ã§ããã 以äžã®å³ã¯ããããã®ãœãªã¥ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ã®äŸã瀺ããŠããŸãã
ã³ãŒãã¯2ã€ã®ã¬ãã«ã«åå²ãããŸãããRESTAPIãšããŸããŸãªããŒã«ã«ãªããžããªã®äž¡æ¹ãä»ããŠåä¿¡ããããŒã¿ã®åä¿¡/ä¿åãæ
åœããããŒã¿ã¬ã€ã€ãŒãšãããŒã¿ã®åŠçãšè¡šç€ºãæ
åœãããã¥ãŒã¬ã€ã€ãŒã§ãã
APIProvider
ã¯ãã¢ã¯ãã£ããã£ãšãã©ã°ã¡ã³ããREST APIãšå¯Ÿè©±ã§ããããã«ããã¡ãœãããæäŸããŸãã ãããã®ã¡ãœããã¯ã
URLConnection
ãš
AsyncTask
ã䜿çšããŠããã¯ã°ã©ãŠã³ãã¹ã¬ããã§èŠæ±ãå®è¡ããã³ãŒã«ããã¯é¢æ°ãä»ããŠçµæãã¢ã¯ãã£ããã£ã«é
ä¿¡ããŸãã
CacheProvider
ãåã
CacheProvider
æ©èœããŸã
CacheProvider
ãŸãã¯SQLiteããããŒã¿ãååŸããã¡ãœããããããçµæãè¿ãã³ãŒã«ããã¯é¢æ°ããããŸãã
åé¡
ãã®ã¢ãããŒãã®äž»ãªåé¡ã¯ããã¬ãŒã³ããŒã·ã§ã³ã®ã¬ãã«ã®è²¬ä»»ã倧ããããããšã§ãã ã¢ããªã±ãŒã·ã§ã³ãããã°æçš¿ã®ãªã¹ããããŠã³ããŒãããããããSQLiteã«ãã£ãã·ã¥ããŠãã
ListView
衚瀺ããå¿
èŠãããç°¡åãªã·ããªãªãæ³åããŠã¿ãŸãããã
Activity
ã¯æ¬¡ã®ããšãè¡ãå¿
èŠããããŸãã
APIProvider#loadPosts(Callback)
ã¡ãœãããåŒã³åºããŸãã- æž¡ããã
Callback
ã§onSuccess()
ã¡ãœãããonSuccess()
ãåŸ
ã£ãŠããã onSuccess()
CacheProvider#savePosts(Callback)
åŒã³åºããŸãã - æž¡ããã
Callback
ã§onSuccess()
ã¡ãœãããonSuccess()
ãåŸ
ã£ãŠãããããŒã¿ãListView
衚瀺ããŸãã APIProvider
ãšCacheProvider
äž¡æ¹ã§çºçããå¯èœæ§ã®ãã2ã€ã®ãšã©ãŒãåå¥ã«åŠçããŸãã
ãããŠãããã¯å¥ã®ç°¡åãªäŸã§ãã å®éã«ã¯ãAPIãããã¬ãŒã³ããŒã·ã§ã³ã¬ãã«ãæåŸ
ãã圢åŒã§ã¯ãªãããŒã¿ãè¿ãå ŽåããããŸããã€ãŸãã
Activity
ã¯ãããŒã¿ãæäœããåã«äœããã®æ¹æ³ã§ããŒã¿ã倿ããã³/ãŸãã¯ãã£ã«ã¿ãŒåŠçããå¿
èŠããããŸãã ãŸãã¯ãããšãã°ã
loadPosts()
ã¯ã©ããããåãåãå¿
èŠãããåŒæ°ïŒããšãã°ãPlay Services SDKãä»ããŠèŠæ±ããã¡ãŒã«ã¢ãã¬ã¹
loadPosts()
ãåããŸãã 確ãã«ãSDKã¯ã³ãŒã«ããã¯é¢æ°ãä»ããŠéåæçã«ã¢ãã¬ã¹ãè¿ããŸããããã¯ãã³ãŒã«ããã¯é¢æ°ã®3ã€ã®ã¬ãã«ã®ãã¹ããããããšãæå³ããŸãã ãŸããŸãè€éã«ãªã£ãŠãããšãã³ãŒã«ããã¯å°çãšåŒã°ãããã®ã«ãªã£ãŠããŸããŸãã
èŠçŽïŒ
- ã¢ã¯ãã£ããã£ãšãã©ã°ã¡ã³ãã¯ãå¥å
šãããŠç¶æãå°é£ã«ãªããŸãã
- ãã¹ãã¬ãã«ãå€ããããšãã³ãŒããããªããçè§£ãã«ãããªããæ°ããæ©èœã®è¿œå ã倿Žãå°é£ã«ãªããŸãã
- ãŠããããã¹ãã¯ããå°é£ã§ãïŒãŸã£ããäžå¯èœã«ãªããªãå ŽåïŒãããã¯ããŠããããã¹ãã«ããŸã圹ç«ããªãå€ãã®ããžãã¯ãã¢ã¯ãã£ããã£ãŸãã¯ãã©ã°ã¡ã³ãã«ããããã§ãã
RxJavaã䜿çšããæ°ããã¢ãŒããã¯ãã£
äžèšã®ã¢ãããŒãã2幎é䜿çšããŸããã ãã®éã«ãç§ãã¡ã¯ããã€ãã®å€æŽãè¡ãã説æããåé¡ã«ããçã¿ãšèŠçã軜æžããŸããã ããšãã°ãããã€ãã®è£å©ã¯ã©ã¹ã远å ãããããã®ããžãã¯ã®äžéšãåãåºããŠ
APIProvider
ãšãã©ã°ã¡ã³ããã¢ã³ããŒããã
APIProvider
Volleyã®äœ¿çšãéå§ããŸããã ãããã®å€æŽã«ãããããããã³ãŒãã®ãã¹ãã¯äŸç¶ãšããŠå°é£ã§ãããã³ãŒã«ããã¯ãã«ããšãã©ãçºçããŸããã
RxJavaã«é¢ããããã€ãã®èšäºãèªãã 2014幎ã«ç¶æ³ã¯å€ããå§ããŸããã ããã€ãã®è©Šçšãããžã§ã¯ãã§è©ŠããŠã¿ããšããããã¹ããããã³ãŒã«ããã¯é¢æ°ã®åé¡ã®è§£æ±ºçãèŠã€ãã£ãããã§ãã ãªã¢ã¯ãã£ãããã°ã©ãã³ã°ã«æ
£ããŠããªãå Žåã¯ã
ãã®æŠèŠãèªãããšããå§ãããŸãã èŠããã«ãRxJavaã§ã¯ãéåæã¹ããªãŒã ïŒããŒã¿ã®ç®¡çè
ïŒãã®å Žåãã¹ããªãŒã ã®ãããªã¹ããªãŒã ãæå³ããã¹ã¬ãã-å®è¡ã¹ã¬ãããšæ··åããªãã§ãã ããïŒã䜿çšããŠã倿ããã¹ããªãŒã ã«é©çšã§ããå€ãã®
æŒç®åãæäŸããŸããå¿
èŠã«å¿ããŠããŒã¿ããã£ã«ã¿ãªã³ã°ãŸãã¯çµåããŸãã
éå»2幎éã«èç©ãããã¹ãŠã®ãã³ããèæ
®ããŠãæ°ããã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ãæ€èšãå§ããæ¬¡ã®ããšã«æ°ä»ããŸããã
ã³ãŒãã¯ãŸã 2ã€ã®ã¬ãã«ã«åãããŠããŸããããŒã¿ã¬ã€ã€ãŒã«ã¯
DataManager
ãšäžé£ã®ãã«ããŒã¯ã©ã¹ãå«ãŸãããã¬ãŒã³ããŒã·ã§ã³ã¬ã€ã€ãŒã«ã¯
Activity
ã
Fragment
ã
ViewGroup
ãªã©ã®Android SDKã¯ã©ã¹ãå«ãŸããŸãã
ãã«ããŒã¯ã©ã¹ïŒå³ã®3åç®ïŒã®è²¬ä»»ç¯å²ã¯éåžžã«éå®ãããŠãããäžè²«ããæ¹æ³ã§å®è£
ãããŠããŸãã ããšãã°ãã»ãšãã©ã®ãããžã§ã¯ãã«ã¯ãREST APIã«ã¢ã¯ã»ã¹ããããããŒã¿ããŒã¹ããããŒã¿ãèªã¿èŸŒãã ãããµãŒãããŒãã£ã®SDKãšããåããããããããã®ã¯ã©ã¹ããããŸãã ã¢ããªã±ãŒã·ã§ã³ããšã«ãã«ããŒã¯ã©ã¹ã®ã»ãããç°ãªããŸãããæãäžè¬çã«äœ¿çšãããã®ã¯æ¬¡ã®ãšããã§ãã
PreferencesHelper
ïŒ SharedPreferences
ããŒã¿ãåŠçããŸããDatabaseHelper
ïŒSQLiteã§åäœããŸãã- REST APIãåŒã³åºãã¬ãããã£ãããµãŒãã¹ã Volleyã®ä»£ããã«Retrofitã䜿çšãå§ããŸãããããã¯ãRxJavaã§ã®äœæ¥ããµããŒãããããã§ãã ã¯ãã圌ã®APIã¯ããå¿«é©ã§ãã
å€ãã®ãããªãã¯ãã«ããŒã¯ã©ã¹ã¡ãœããã¯ãRxJava
Observables
è¿ããŸãã
DataManager
ã¯ãæ°ããã¢ãŒããã¯ãã£ã®äžå¿éšåã§ãã RxJavaãªãã¬ãŒã¿ãŒãåºç¯å²ã«äœ¿çšããŠããã«ããŒããåãåã£ãããŒã¿ãçµåããã£ã«ã¿ãŒåŠçã倿ããŸãã
DataManager
ã®ã¿ã¹ã¯ã¯ãã¢ã¯ãã£ããã£ãšãã©ã°ã¡ã³ããããŒã¿ã®ãã³ãŒãã³ã°ãäœæ¥ããè§£æŸããããšã§ãã
DataManager
ã¯ãå¿
èŠãªãã¹ãŠã®å€æãå®è¡ãã衚瀺å¯èœãªããŒã¿ãæäŸããŸãã
以äžã®ã³ãŒãã¯ã
DataManager
ã¡ãœãããã©ã®ããã«èŠãããã瀺ããŠããŸãã æ¬¡ã®ããã«æ©èœããŸãã
- Retrofitãä»ããŠæçš¿ã®ãªã¹ããèªã¿èŸŒã¿ãŸãã
DatabaseHelper
ãä»ããŠããŒã«ã«ããŒã¿ããŒã¹ã«ããŒã¿ããã£ãã·ã¥ããŸãã- æçš¿ããã£ã«ã¿ãŒãã仿¥å
¬éããããã®ãéžæããŸããããã¯ããã¬ãŒã³ããŒã·ã§ã³ã¬ãã«ã§ã®ã¿è¡šç€ºãããããã§ãã
public Observable<Post> loadTodayPosts() { return mRetrofitService.loadPosts() .concatMap(new Func1<List<Post>, Observable<Post>>() { @Override public Observable<Post> call(List<Post> apiPosts) { return mDatabaseHelper.savePosts(apiPosts); } }) .filter(new Func1<Post, Boolean>() { @Override public Boolean call(Post post) { return isToday(post.date); } }); }
ãã¬ãŒã³ããŒã·ã§ã³ã¬ãã«ã®ã³ã³ããŒãã³ãã¯ããã®ã¡ãœãããåŒã³åºããããã«ãã£ãŠè¿ããã
Observable
ããµãã¹ã¯ã©ã€ãããã ãã§ãã ãµãã¹ã¯ãªãã·ã§ã³ãå®äºãããšãåä¿¡ãã
Observable
ã«ãã£ãŠè¿ãããæçš¿ã
Adapter
ã«è¿œå ããŠã
RecyclerView
ãŸãã¯åæ§ã®è¡šç€ºãè¡ãããšãã§ããŸãã
ãã®ã¢ãŒããã¯ãã£ã®æåŸã®èŠçŽ ã¯
ã€ãã³ããã¹ã§ãã ã€ãã³ããã¹ã䜿çšãããšãããŒã¿ã¬ãã«ã§çºçããç¹å®ã®ã€ãã³ãã«é¢ããã¡ãã»ãŒãžãå®è¡ã§ãããã¬ãŒã³ããŒã·ã§ã³ã¬ãã«ã®ã³ã³ããŒãã³ãã¯ãããã®ã¡ãã»ãŒãžããµãã¹ã¯ã©ã€ãã§ããŸãã ããšãã°ã
DataManager
ã®
signOut()
ã¡ãœããã¯ã察å¿ãã
Observable
äœæ¥
Observable
å®äºããããšãéç¥ããã¡ãã»ãŒãžãããªã¬ãŒãããã®ã€ãã³ãã«ãµãã¹ã¯ã©ã€ãããã¢ã¯ãã£ããã£ã¯ããŠãŒã¶ãŒããã°ã¢ãŠãããŠããããšã瀺ãããã«ã€ã³ã¿ãŒãã§ãŒã¹ãåæç»ã§ããŸãã
ãã®ã¢ãããŒãã¯ã©ã®ããã«åªããŠããŸããïŒ
- RxJavaã®
Observables
ãšæŒç®åã¯ããã¹ããããã³ãŒã«ããã¯é¢æ°ããç§ãã¡ãæããŸãã
DataManager
ã¯ããã¬ãŒã³ããŒã·ã§ã³ã¬ãã«ã§ä»¥åã«å®è¡ãããäœæ¥ãåŒãåãããããã¢ã¯ãã£ããã£ãšãã©ã°ã¡ã³ããã¢ã³ããŒãããŸããDataManager
ããã³ãã«ããŒã¯ã©ã¹ã®ã³ãŒãã®äžéšãç§»åãããšãã¢ã¯ãã£ããã£ãšãã©ã°ã¡ã³ãã®ãŠããããã¹ããç°¡åã«ãªããŸãã- è²¬ä»»ã®æç¢ºãªåé¢ãšãããŒã¿å±€ãšã®å¯Ÿè©±ã®å¯äžã®ãã€ã³ããšããŠã®
DataManager
ã®åé¢ã«ãããã¢ãŒããã¯ãã£å
šäœããããã¹ããã¬ã³ããªãŒã«ãªããŸãã ãã«ããŒã¯ã©ã¹ããŸãã¯DataManager
ãç¹å¥ãªã¹ã¿ãã«ç°¡åã«çœ®ãæããããšãã§ããŸãã
ã©ã®ãããªåé¡ãæ®ã£ãŠããŸãããïŒ
- å€§èŠæš¡ã§è€éãªãããžã§ã¯ãã§ã¯ã
DataManager
ãè¥å€§åããå¯èœæ§ãããããã®ãµããŒãã¯ã¯ããã«å°é£ã«ãªããŸãã - ãã¬ãŒã³ããŒã·ã§ã³ã¬ãã«ã®ã³ã³ããŒãã³ãïŒã¢ã¯ãã£ããŒã·ã§ã³ããã©ã°ã¡ã³ããªã©ïŒããã軜éã«ããŸããããRxJavaãµãã¹ã¯ãªãã·ã§ã³ç®¡çããšã©ãŒåæãªã©ãäžå¿ã«å±éããããªãã®éã®ããžãã¯ãå«ãŸããŠããŸãã
ã¢ãã«ãã¥ãŒãã¬ãŒã³ã¿ãŒã詊ã
éå»1幎éã§ã
MVPãŸãã¯
MVVMãšããŠãåã
ã®ã¢ãŒããã¯ãã£ãã¿ãŒã³ãAndroidã³ãã¥ããã£ã§äººæ°ãéãå§ããŠããŸãã
å¥ã®èšäºãšåæ§ã«ã
ãã¹ããããžã§ã¯ãã§ãããã®ãã¿ãŒã³ã調ã¹ãçµæãMVPããããžã§ã¯ãã®ã¢ãŒããã¯ãã£ã«å€§å¹
ãªå€æŽãå ããããšãã§ããããšãããããŸããã ãã§ã«ã³ãŒãã2ã€ã®ã¬ãã«ïŒããŒã¿ãšãã¬ãŒã³ããŒã·ã§ã³ïŒã«åå²ããŠãããããMVPã®å°å
¥ã¯èªç¶ã«èŠããŸããã æ°ããã¬ãã«ã®ãã¬ãŒã³ã¿ãŒã远å ããã³ãŒãã®äžéšããã¥ãŒããããã«è»¢éããå¿
èŠããããŸããã
ããŒã¿ã¬ãã«ã¯å€æŽãããŸããããMVPã®å¯Ÿå¿ããã¬ãã«ã®ååãšäžèŽãã
ã¢ãã«ãšåŒã°ããããã«ãªããŸããã
ãã¬ãŒã³ã¿ãŒã¯ãã¢ãã«ããããŒã¿ãããŒãããããŒã¿ãããŒãããããšãã«ãã¬ãŒã³ããŒã·ã§ã³ã¬ãã«ã§é©åãªã¡ãœãããåŒã³åºã責任ããããŸãã ãã¬ãŒã³ã¿ãŒã¯ã
DataManager
ã«ãã£ãŠè¿ããã
Observables
ã«ãµãã¹ã¯ã©ã€ãããŸãã ãããã£ãŠã
ãµãã¹ã¯ãªãã·ã§ã³ã
ã¹ã±ãžã¥ãŒã©ãªã©ã®ãšã³ãã£ãã£ã䜿çšããå¿
èŠããããŸãã ããã«ãçºçãããšã©ãŒãåæããããå¿
èŠã«å¿ããŠè¿œå ã®æŒç®åãããŒã¿ã¹ããªãŒã ã«é©çšãããã§ããŸãã ããšãã°ãäžéšã®ããŒã¿ãé€å€ããå¿
èŠãããããã®ãã£ã«ã¿ãŒãä»ã®ã©ãã§ã䜿çšãããªãå¯èœæ§ãé«ãå Žåããã®ãã£ã«ã¿ãŒã
DataManager
ã§ã¯ãªããã¬ãŒã³ã¿ãŒã¬ãã«ã«ç§»åããããšã¯çã«ããªã£ãŠããŸãã
以äžã¯ããã¬ãŒã³ã¿ãŒã¬ãã«ã®ã¡ãœããã®1ã€ã§ãã åã®ã»ã¯ã·ã§ã³ã§å®çŸ©ãã
dataManager.loadTodayPosts()
ã¡ãœããã«ãã£ãŠè¿ããã
Observable
ãžã®ãµãã¹ã¯ãªãã·ã§ã³ããããŸãã
public void loadTodayPosts() { mMvpView.showProgressIndicator(true); mSubscription = mDataManager.loadTodayPosts().toList() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Subscriber<List<Post>>() { @Override public void onCompleted() { mMvpView.showProgressIndicator(false); } @Override public void onError(Throwable e) { mMvpView.showProgressIndicator(false); mMvpView.showError(); } @Override public void onNext(List<Post> postsList) { mMvpView.showPosts(postsList); } }); }
mMvpView
ã¯ã
mMvpView
ã䜿çšãã
mMvpView
ã¬ãã«ã®ã³ã³ããŒãã³ãã§ãã éåžžã
Activity
ã
Fragment
ãŸãã¯
ViewGroup
ãŸãã
åã®ã¢ãŒããã¯ãã£ãšåæ§ã«ããã¬ãŒã³ããŒã·ã§ã³ã¬ã€ã€ãŒã«ã¯Android SDKã®æšæºã³ã³ããŒãã³ããå«ãŸããŠããŸãã éãã¯ããããã®ã³ã³ããŒãã³ãã
Observables
çŽæ¥ãµãã¹ã¯ã©ã€ãããªãããšã§ãã 代ããã«ã
MvpView
ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ãã
showError()
ã
showProgressIndicator()
ãªã©ã®æç¢ºã§çè§£å¯èœãªã¡ãœããã®ãªã¹ããæäŸããŸãã ãã¬ãŒã³ããŒã·ã§ã³ã¬ãã«ã®ã³ã³ããŒãã³ãã¯ããŠãŒã¶ãŒã®æäœïŒã¯ãªãã¯ã€ãã³ããªã©ïŒãåŠçãããã¬ãŒã³ã¿ãŒã§é©åãªã¡ãœãããåŒã³åºã圹å²ãæ
ããŸãã ããšãã°ãæçš¿ã®ãªã¹ããèªã¿èŸŒããã¿ã³ãããå Žåã
Activity
ã¯
OnClickListener
presenter.loadTodayPosts()
ã¡ãœããã
OnClickListener
ãŸãã
å®éã®äŸãã芧ã«ãªãããå Žåã¯ãGithubã®ãªããžããªãã芧ãã ãã ã ããã«ãå¿
èŠãªå Žåã¯ã ã¢ãŒããã¯ãã£ã®æ§ç¯ã«é¢ããæšå¥šäºé
ãã芧ãã ããã
ãã®ã¢ãããŒãã¯ã©ã®ããã«åªããŠããŸããïŒ
- ã¢ã¯ãã£ããã£ãšãã©ã°ã¡ã³ãã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®ã¬ã³ããªã³ã°/æŽæ°ãšãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã€ãã³ãã®åŠçã«éçŽããããããããã«è»œéã«ãªããŸãã ãããã£ãŠãä¿å®ãããã«å®¹æã«ãªããŸãã
- ãã¬ãŒã³ã¿ãŒåãã®ãŠããããã¹ãã®èšè¿°ã¯éåžžã«ç°¡åã§ãããã¬ãŒã³ããŒã·ã§ã³ã¬ãã«ãããã¯ããã ãã§ãã 以åã¯ããã®ã³ãŒãã¯ãã¬ãŒã³ããŒã·ã§ã³å±€ã®äžéšã§ããããŠããããã¹ãã¯ã§ããŸããã§ããã ã¢ãŒããã¯ãã£ã¯ããã«ãã¹ããããããªã£ãŠããŸãã
DataManager
ãè¥å€§åããããå Žåã¯ããã€ã§ãã³ãŒãã®äžéšããã¬ãŒã³ã¿ãŒã«ç§»åã§ããŸãã
ã©ã®ãããªåé¡ãæ®ã£ãŠããŸãããïŒ
- 倧éã®ã³ãŒãã䜿çšããŠãã
DataManager
ã¯è¥å€§åããå¯èœæ§ããããŸãã ãããŸã§ã®ãšãããããã¯çºçããŠããŸããããã€ãã³ãã®ãã®ãããªçºå±ãæŸæ£ããŸããã
ç§ã説æããã¢ãããŒãã¯çæ³çã§ã¯ãªãããšã«èšåããããšãéèŠã§ãã äžè¬çã«ãããªãã®ãã¹ãŠã®åé¡ããã£ã±ããšè§£æ±ºããéåžžã«ãŠããŒã¯ã§ãŠããŒã¯ãªã¢ãŒããã¯ãã£ãã©ããã«ãããšä¿¡ããã®ã¯åçŽã§ãã Androidãšã³ã·ã¹ãã ã¯ä»åŸãé«éã§é²åãç¶ãããããã€ãã³ããç ç©¶ãèªæžãå®éšã«é
ããã«ã€ããŠããå¿
èŠããããŸãã ãªãã§ïŒ çŽ æŽãããAndroidã¢ããªãäœãç¶ããããã«ã
ç§ã®èšäºã楜ããã§ãããã圹ã«ç«ã€ããšãé¡ã£ãŠããŸãã ãã®å Žåã¯ã[æšå¥š]ãã¿ã³ãã¯ãªãã¯ããããšãå¿ããªãã§ãã ããïŒç¿»èš³è
ïŒå
ã®èšäºã«ç§»åããèšäºã®æåŸã«ããããŒããã¿ã³ãã¯ãªãã¯ããŠãã ããïŒã ãŸããçŸåšã®ã¢ãããŒãã«ã€ããŠã®ãæèŠããèãããã ããã