åã«ç€ºããããã«ãAndroidãã¬ãŒã ã¯ãŒã¯ã¯ããã€ãã®çžäºäœçšãã¿ãŒã³ãå®è£ ããŠããŸãã
- Intentã¯ã©ã¹ã䜿çšããã¡ãã»ãŒãžã³ã°
- Intentã¯ã©ã¹ãšBroadcastReceiverã¯ã©ã¹ã䜿çšãããªãã¶ãŒããŒ
- ã¡ãœããã³ãŒã«ãåŸç¶ããé 延ãã€ã³ãã£ã³ã°ã¯ãã³ã³ãã³ããããã€ããŒïŒ ContentProviders ïŒããã³ããŒã«ã«ïŒã€ã³ããã»ã¹ïŒãµãŒãã¹ïŒ ãµãŒãã¹ ïŒã«ã¢ã¯ã»ã¹ããããã«äœ¿çšãããŸã
- ãµãŒãã¹ã³ãŒã«ïŒAIDLïŒã®ã¬ã€ããã€ã³ãã£ã³ã°ãšããã»ã¹éæç¶ãéä¿¡ ïŒIPCïŒ
ã¡ãã»ãŒãžã³ã°
æããã«ãããã¯éçºè ã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ã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ã ããŒãI-èµ·æº
- Androidã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ã ããŒãII-建ç¯ã¹ã¿ã€ã«ãšãã¿ãŒã³
- Androidã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ã ããŒãIII-ã¢ããªã±ãŒã·ã§ã³ã®äž»èŠéšå
翻蚳è ããã ããã¯ãAndroidã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ã«é¢ããVlad Nevzorovã® 4ã€ã®èšäºã®æåŸã§ãã ç§ã®å©ããšæ°æ©ã³ã³ãã¥ãŒã¿ãŒããæ°ãæ£ãããªãããã«ããŠãããæãã劻ã¬ãªã¢ã«æè¬ã ãæçãªã³ã¡ã³ããšçºèšã®ããã«ããã©ã€ã¶ãŒã®Monnoroch ã Semp ã PomanoB ã ssidelnikov ã So1 ã Manul ã pravic ãããã³szKarlenã«æè¬ããŸãã