ãã®èšäºã§ã¯ãAndroidã¢ããªã±ãŒã·ã§ã³ã®äžéšãçžäºäœçšããããŸããŸãªã¡ã«ããºã ã«ã€ããŠèª¬æããŸãã ããããã¹ãŠã®ã¡ã«ããºã ããçžäºäœçšã®ã¬ãã«ããšåŒã¶ããšã«åæããŸãããïŒç§ã®ç¥ãéããAndroidã®ããã¥ã¡ã³ãã«ã¯ããã«é¢ããç¹å¥ãªçšèªã¯ãããŸããïŒã
åã«ç€ºããããã«ãAndroidãã¬ãŒã ã¯ãŒã¯ã¯ããã€ãã®çžäºäœçšãã¿ãŒã³ãå®è£
ããŠããŸãã
ã¡ãã»ãŒãžã³ã°
æããã«ãããã¯éçºè
ãAndroidåãã®ããã°ã©ãã³ã°ãéå§ãããšãã«ééããæåã®å¯Ÿè©±ã¡ã«ããºã ã§ãã
ã¢ã¯ãã£ããã£ãŸãã¯
ãµãŒãã¹ãèµ·åããããã«äœ¿çšãã
ãŸã ã ãã®ã¡ã«ããºã ã¯ã
Contextã¯ã©ã¹ã®3ã€ã®ã¡ãœããïŒä»¥åã®
èšäºã® 1ã€ã§èšåãããŠããïŒãšActivityã¯ã©ã¹ã®1ã€ã®ã¡ãœããã䜿çšããŠå®è£
ãããŸãã
- Contextã¯ã©ã¹ã®startActivityïŒïŒã¯ã¢ã¯ãã£ããã£ãéå§ããŸã
- Activityã¯ã©ã¹ã®startActivityForResultïŒïŒã¯ã¢ã¯ãã£ããã£ãéå§ããŸã
- Contextã¯ã©ã¹ã®startServiceïŒïŒãŸãã¯bindServiceïŒïŒã¯ãå¿
èŠã«å¿ããŠãµãŒãã¹ãéå§ãããããšéä¿¡ããŸãïŒ2ã€ã®ã¡ãœããã«ã¯ããã€ãã®éãããããŸãïŒ
ã©ã¡ãã®å ŽåããIntentã¯ã©ã¹ã¯éä¿¡ãããã¡ãã»ãŒãžãšããŠæ©èœããŸãã
Androidã¯ãã¡ãã»ãŒãžã®å®å
ãšãªãã¢ã¯ãã£ããã£ãŸãã¯ãµãŒãã¹ãã©ã®ããã«ç¥ãã®ã§ããïŒ ãããè¡ãã«ã¯2ã€ã®æ¹æ³ããããŸãã
- ã€ã³ãã³ãã¯ãã³ã³ããŒãã³ãã®ååãæç€ºçã«ç€ºãå ŽåããããŸãã ãã®ãããªã€ã³ãã³ãã¯ãæç€ºçïŒ "explicitIntents"ïŒãšåŒã°ããŸãã ã¿ãŒã²ããã³ã³ããŒãã³ãã¯ãsetComponentïŒïŒããã³setClassïŒïŒã¡ãœããã«ãã£ãŠæ±ºå®ãããŸãã ãã®ã¿ã€ãã®æå³æåã®çžäºäœçšã¡ã«ããºã ã¯ãä»ã®ãã¹ãŠãšã¯ç°ãªããé
å»¶ãã€ã³ãã£ã³ã°ãã¿ãŒã³ãå®è£
ããŸããã
- ã¿ãŒã²ããã³ã³ããŒãã³ãã¯ã ã€ã³ãã³ããã£ã«ã¿ãŒã«åºã¥ãéåžžã«çããæææ±ºå®ã¡ã«ããºã ã«ãã£ãŠæ±ºå®ãããŸãã
ã¡ãã»ãŒãžïŒIntentã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ïŒãéä¿¡ããå Žåã察話ã¡ã«ããºã ã¯1ã€ã®ã³ã³ããŒãã³ãã®ã¿ã«ã¡ãã»ãŒãžãé
ä¿¡ãããããŸã£ããé
ä¿¡ããªãããšã«æ³šæããŠãã ããã
ãããªãã·ã£ãŒ/ãµãã¹ã¯ã©ã€ããŒ
ãããªãã·ã£ãŒ/ãµãã¹ã¯ã©ã€ããŒã€ã³ã¿ã©ã¯ã·ã§ã³ã¡ã«ããºã ã¯ãã¡ãã»ãŒãžãšåãIntentã¯ã©ã¹ã䜿çšããã¿ãŒã²ããã³ã³ããŒãã³ãå®çŸ©ã¡ã«ããºã ãšåããã£ã«ã¿ãŒã䜿çšããŸãããåäœãå°ãç°ãªããŸãã ãã®å Žåã«äœ¿çšãããã€ã³ãã³ãã¯ããããŒããã£ã¹ãããšåŒã°ããŸãã ãããã®æå³ã¯BroadcastReceiverã«ã®ã¿é
ä¿¡ã§ããŸãã
ã¡ãã»ãŒãžã®éä¿¡ã«äœ¿çšãããã€ã³ãã³ããšã¯ç°ãªããåäžã®ãããŒããã£ã¹ãã€ã³ãã³ããè€æ°ã®ã³ã³ããŒãã³ãã«é
ä¿¡ã§ããŸãã
å®éãAndroidã¯2ã€ã®ç°ãªããããªãã·ã£ãŒ/ãµãã¹ã¯ã©ã€ããŒã¡ã«ããºã ãå®è£
ããŠãããããããã«2ã€ã®ããŒãžã§ã³ïŒéåžžããã³ãã¹ãã£ãããŒãããã¹ãã£ãããŒãïŒããããŸãã
- éåžžã®ãããŒããã£ã¹ãã¯ãContextã¯ã©ã¹ã®sendBroadcastïŒïŒããã³sendStickyBroadcastïŒïŒã¡ãœããã«ãã£ãŠå®è£
ãããŸãã
- é åºä»ããããŒããã£ã¹ãã¯ãsendOrderedBroadcastïŒïŒããã³sendStickyOrderedBroadcastïŒïŒã¡ãœããã«ãã£ãŠå®è£
ãããŸãã
ãŸã æ··ä¹±ããŠããŸããããïŒ
éåžžã®ãããŒããã£ã¹ãã¡ã«ããºã ã¯ããã¹ãŠã®é©åãªãããŒããã£ã¹ãã¬ã·ãŒããŒã«æå³ãéåæçã«é
ä¿¡ãããããã«åå¥ã«å¿çããŸãã ã€ãŸãããããããŒããã£ã¹ãã¬ã·ãŒãã¯ãå¥ã®ãããŒããã£ã¹ãã¬ã·ãŒããã€ã³ãã³ãã«å¿çããæ¹æ³ããŸãã¯ã€ã³ãã³ããå¥ã®ãããŒããã£ã¹ãã¬ã·ãŒãã«é
ä¿¡ãããæ¹æ³ã«åœ±é¿ãäžããããšã¯ã§ããŸããã ããã¯ãéåžžã®ãããªãã·ã£ãŒ/ãµãã¹ã¯ã©ã€ããŒãã³ãã¬ãŒãã§ãã
é åºä»ãããããããŒããã£ã¹ãã¡ã«ããºã ã¯ãã€ã³ãã³ãããã¹ãŠã®é©åãªãããŒããã£ã¹ãåä¿¡è
ã«é çªã«ãã€ãŸãäžåºŠã«1ã€ã ãé
ä¿¡ããŸãã ãããã£ãŠãåæŸéåä¿¡æ©ã¯æœåšçã«æ¬¡ã®ããšãã§ããŸãã
- åãæå³ã§æ©èœãã以åã®æŸéåä¿¡æ©ã®çµæã䜿çšãã
- å¿
èŠã«å¿ããŠãã€ã³ãã³ãã®ãããªãåŠçãäžæããŸã
é åºä»ãããããããŒããã£ã¹ããåæåããã³ã³ããŒãã³ãã¯ããããŒããã£ã¹ãåä¿¡æ©ã®ãã§ãŒã³å
šäœããã€ã³ãã³ããåŠçããçµæãåãåãããšãã§ããŸãã
åçåããããããŒããã£ã¹ãã¯ã
äžé£ã®è²¬ä»»ãã³ãã¬ãŒãã®å®è£
ã§ã ã
ã¹ãã£ãããŒæŸéã¯ãåŸæ¥ã®æŸéã®äžçš®ã§ãã éãã¯ãã³ã³ããã¹ãã¯ã©ã¹ã®removeStickyBroadcastïŒïŒã¡ãœããã䜿çšããŠæç€ºçã«åé€ãããŸã§ãã€ã³ãã³ãã䜿çšã§ããããšã§ãã åé€ãããªããã¹ãã£ãããŒãã€ã³ãã³ãã¯ã¡ã¢ãªãªãŒã¯ãåŒãèµ·ããããããã®ã¿ã€ãã®ãããŒããã£ã¹ãã¯æ³šæããŠäœ¿çšããå¿
èŠãããããšã«æ³šæããŠãã ããã
æå³æåã®çžäºäœçšã¡ã«ããºã ã«é¢ããçµè«
説æãããŠãããã¹ãŠã®çžäºäœçšã¡ã«ããºã ã¯ãã¡ãã»ãŒãžãšããŠIntentã¯ã©ã¹ã䜿çšããŸãã æç€ºãããŠããã¡ãœããã®ã»ãšãã©ã¯Contextã¯ã©ã¹ã«ãã£ãŠå®è£
ãããŠããããšã«æ³šæããŠãã ãããã€ãŸããçè«çã«ã¯ãã¹ãŠã®ãµãã¯ã©ã¹ã§äœ¿çšã§ããŸãã
ããããããã¹ãŠã®Androidã€ã³ã¿ã©ã¯ã·ã§ã³ã¡ã«ããºã ãIntentã¯ã©ã¹ã䜿çšããŠãããšçµè«ä»ããããšãã§ããŸãã ããããããã¯å®å
šã«çå®ã§ã¯ãããŸããã
ContentProvidersã®é
å»¶ãã€ã³ãã£ã³ã°
ã»ãšãã©ã®å Žåã
ContentProviderã¯ã©ã¹
㯠SQLiteããŒã¿ããŒã¹ã®ã©ãããŒãšããŠäœ¿çšãããŸãã çè«çã«ã¯ãããŒã¿ãä¿å/åä¿¡ããä»ã®ã¡ã«ããºã ã«äœ¿çšã§ããŸãã ãã®ã¯ã©ã¹ã®äœ¿ç𿹿³ã«ã€ããŠã¯ã
ãã¡ããã芧ãã ãã ã
ã³ã³ãã³ããã£ã¹ããªãã¥ãŒã¿ã䜿çšããæ¹æ³ã¯å€æ°ãããŸãã ã³ã³ãã³ãããŒãµãŒïŒéåžž
ããããã·ãã¿ãŒã³ãå®è£
ãã ContentProviderClientã®ã€ã³ã¹ã¿ã³ã¹ãŸãã¯ãµãã¯ã©ã¹ïŒã§ãããã·ãšããŠæ©èœãããªããžã§ã¯ãã®ååŸãå«ãŸããŸãã ãã®ä»ã¯ã
Cursorã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ããŸããããã«ããããããã€ããŒããè¿ãããå€ãã®ããŒã¿ãå埩åŠçã§ããŸãã ãããã®å Žåã§ããç¹å®ã®ContentProviderã¯URIã§èå¥ãããå¿
èŠããããŸãïŒè©³çްã«ã€ããŠã¯ã
ãã¡ããã芧ãã ããïŒã
ãããã«ãããããã¯å
žåçãª
é
å»¶ãã€ã³ãã£ã³ã°ãã¿ãŒã³ã§ãã
é
å»¶ãã€ã³ãã£ã³ã°ãšããã»ã¹ééä¿¡ïŒIPCïŒ
çžäºäœçšã®ã¡ã«ããºã ãããã§çµãã£ããšæããªããããªãã¯ééã£ãŠããŸãã
ContentProviderã¯ã©ã¹ãšã¯å¥ã«ãMVVMã¢ãŒããã¯ãã£ã®ã¢ãã«ãšããŠæ©èœããServiceã¯ã©ã¹ããããŸãã
åã®èšäºã§ ãåã圹å²ãå®è¡ãã2ã€ã®ç°ãªãã¯ã©ã¹ãAndroidã«ãããšãã仮説çãªçç±ã«ã€ããŠèª¬æããŸããã
- ããŒã«ã«ãµãŒãã¹ã¯ãåŒã³åºãããåãããã»ã¹ã§éå§ãããŸãã ã¢ãŒããã¯ãã£çã«ã¯ãã³ã³ãã³ããããã€ããŒã«äŒŒãŠããŸãããåè
ã«ã¯ç¬èªã®ã©ã€ããµã€ã¯ã«ããããããŒã¿ããŒã¹ã«çŸ©åçãªç®ããªããšããç¹ãç°ãªããŸãã ããŒã«ã«ãµãŒãã¹ã«ã¢ã¯ã»ã¹ããã«ã¯ãé
å»¶ãã€ã³ãã£ã³ã°ã®ããªã¢ã³ãã䜿çšãããŸãã
- ãªã¢ãŒããµãŒãã¹ã¯ãåŒã³åºãããããã»ã¹ã§ã¯ãªããå¥ã®ããã»ã¹ã§å®è¡ãããŸãã ãã®ãããªãµãŒãã¹ãšã®éä¿¡ã¯ã AIDL ïŒAndroid Interface Definition LanguageïŒãšåŒã°ããIPCã®åœ¢åŒãä»ããŠè¡ãããŸãã
åããµãŒãã¹ãããŒã«ã«ãšãªã¢ãŒãã®äž¡æ¹ã§äœ¿çšã§ããããšã¯å°ããããã«ããã§ãã éãã¯ããµãŒãã¹ãåŒã³åºãã³ã³ããŒãã³ããïŒåãããã»ã¹å
ãŸãã¯å¥ã®ããã»ã¹å
ïŒã«ããå Žæã§ãã
ãããš
ããã§ã¯ããµãŒãã¹ã®äœ¿çšã«é¢ãã詳现ãèªãããšãã§ããŸãã
åã®èšäºïŒ
翻蚳è
ããã ããã¯ãAndroidã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ã«é¢ãã
Vlad Nevzorovã® 4ã€ã®èšäºã®æåŸã§ãã ç§ã®å©ããšæ°æ©ã³ã³ãã¥ãŒã¿ãŒããæ°ãæ£ãããªãããã«ããŠãããæãã劻
ã¬ãªã¢ã«
æè¬ã ãæçãªã³ã¡ã³ããšçºèšã®ããã«
ããã©ã€ã¶ãŒã®Monnoroch ã
Semp ã
PomanoB ã
ssidelnikov ã
So1 ã
Manul ã
pravic ãããã³
szKarlenã«æè¬ããŸãã