èå°è£
Googleã®ã¯ãŒã«ãªç¹ã®1ã€ã¯ãæéã®20ïŒ ãã§ããäœæ¥æéã®20ïŒ ã«ã¯ãã¡ã€ã³ãããžã§ã¯ããšã¯é¢ä¿ã®ãªããããžã§ã¯ãã«åå ããæš©å©ããããŸãã Googleã«æ¥ããšããç§ã¯åžžã«ãããžã§ã¯ããããããžã§ã¯ãã«åãæ¿ããŸããããããã«ã€ããŠããåè«ãèšããŸããã ç§ãåžžã«æ»ã£ãŠãããããžã§ã¯ãã®1ã€ã¯Androidã§ããã ãã©ãããã©ãŒã ã®éæŸæ§ãæ°ã«å ¥ã£ãã®ã§ããã€ã¯ã§å®¶ãŸã§è»ãèµ°ããããšãã«ã¬ã¬ãŒãžã®ãã¢ãéãããªã©ãããããããšããã¹ãŠã§ããããã«ãªããŸããã ãã®ãããžã§ã¯ããæåããããšãæ¬åœã«æãã§ããŸããããç§ã¯1ã€ã®ããšã«ã€ããŠå¿é ããŠããŸããã åžžã«ããŒã¿å ¥åã«å³åº§ã«å¿çãããšã¯éããªããã¬ãŒãã¢ãã¡ãŒã·ã§ã³ãšãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã ãã®çç±ã¯ãééã£ãã¹ã¬ããã§å®è¡ãããŠããã¿ã¹ã¯ã§ããããšã¯æããã§ããã
ç§ã¯ã¢ã¯ãã£ããªSMSãŠãŒã¶ãŒã§ãããCupcakeãªãªãŒã¹ïŒAndroid 1.5ïŒã®æºåäžã«è¡ã£ã20ïŒ ã®ãããžã§ã¯ãã®1ã€ã¯ãã¡ãã»ãŒãžã³ã°ã¢ããªã±ãŒã·ã§ã³ã®æé©åã§ããã ç§ã¯ãããæé©åããŠããã¹ã ãŒãºã«ããåŸãä»ã®20ïŒ ã®ãããžã§ã¯ãéãé§ãå·¡ããŸããã ããŒããïŒAndroid 1.6ïŒã®ãªãªãŒã¹åŸãæé©åã®äžéšã誀ã£ãŠå£ããŠããããšãããããŸããã ç§ã¯å°ãã€ã©ã€ã©ããŠããŸããããAndroidã«ã¯åžžã«äžè¶³ããŠããããšãããã£ãã®ã§ãAndroidã¯ããã«äœ¿çšã§ããçµã¿èŸŒã¿ã®åºç¯å²ã«ãããããã©ãŒãã³ã¹ç£èŠããŒã«ã§ãã
ç§ã¯1幎ã»ã©åã«äžžäžæ¥AndroidéçºããŒã ã«åå ããFroyoã§ããã©ãŒãã³ã¹ã®åé¡ã調æ»ããã®ã«å€ãã®æéãè²»ãããŸããã ç¹ã«ãANRãã€ã¢ãã°ãšã®æŠãã«å€ãã®æéãè²»ãããŸããïŒã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã³UIã¹ã¬ããå ã§é·æéã®æäœãå®è¡ãããšããããã®é¢åãªãã€ã¢ãã°ã衚瀺ãããŸãïŒã æ¢åã®ããŒã«ã䜿çšããŠãããã®ãã€ã¢ãã°ããããã°ããããšã¯å°é£ã§éå±ã§ããã ç¹ã«è€æ°ã®ããã»ã¹ãçžäºäœçšããå ŽåïŒããšãã°ããã€ã³ããŒãŸãã¯ContentResolverããä»ã®ããã»ã¹ã®ãµãŒãã¹ãŸãã¯ContentProviderãžã®åŒã³åºãïŒãçç±ãèŠã€ããã®ã«ååã§ã¯ãããŸããã§ããã ã€ã³ã¿ãŒãã§ã€ã¹ã®ã¹ããŒããŠã³ãŸãã¯ANRäŒè©±ã远跡ããã«ã¯ãããæŽç·ŽãããããŒã«ãå¿ èŠã§ããã
StrictMode
StrictModeã¯Gingerbread以éã§å©çšå¯èœãªæ°ããAPIã§ããããã«ãããã¹ã¬ããäžã§å®è¡ãçŠæ¢ãããŠããæäœã®ãªã¹ããèŠå¶ããããªã·ãŒãã¹ã¬ããã«èšå®ã§ããŸãã å®è£ ã®è©³çŽ°ã«ç¹ã«æ·±ãå ¥ã蟌ãããšãªããããã¯åã«ãã¬ããããŒã«ã«å€æ°ã«æ ŒçŽãããããããã¹ã¯ã§ãã
ããã©ã«ãã§ã¯ããã¹ãŠã®æäœãèš±å¯ãããŠãããå¿ èŠã«ãªããŸã§äœãéªéãããŸããã ããªã·ãŒãéããŠç®¡çã§ãããã©ã°ã«ã¯æ¬¡ã®ãã®ããããŸãã
- ãã£ã¹ã¯æžã蟌ã¿æ€åº
- ãã£ã¹ã¯èªã¿åãæ€åº
- ãããã¯ãŒã¯çºèŠ
- æ€åºæïŒãã®ã³ã°
- æ€åºæïŒã¢ããªã±ãŒã·ã§ã³åæ¢
- æ€åºæïŒDropboxãšã³ããªãŒ
- æ€åºæïŒANRãã€ã¢ãã°ã衚瀺
ããã«ãStrictModeã«ã¯ããã£ã¹ã¯ïŒ
java.io.*
ã
android.database.sqlite.*
ããªã©ïŒããã³ãããã¯ãŒã¯ïŒ
java.net.*
ïŒã«ã¢ã¯ã»ã¹ããã»ãšãã©ã®å Žæã«ãã³ã³ãã©ã€ã¢ã³ã¹ããã§ãã¯ããããã€ãã®ããã¯ããããŸã確ç«ãããããªã·ãŒã®çŸåšã®ãããŒãããã«å¿ãã察å¿ã
StrictModeã®åŒ·ã¿ã¯ãBinderãä»ã®ãµãŒãã¹ãŸãã¯ContentProviderã«IPCèŠæ±ãè¡ããã³ã«ããã¹ãŠã®ã¹ã¬ããã§ããªã·ãŒãããªã¬ãŒãããããšã§ããäžæ¹ãããã»ã¹éã®åŒã³åºãã®æ°ã«ãããããããã¬ãŒã¹ã®ã¹ã¿ãã¯ã¯æ¥çãããŸãã
誰ãé ããªããããªã
ã¢ããªã±ãŒã·ã§ã³ããã£ã¹ã¯I / Oãå®è¡ãããã¹ãŠã®å Žæãç¥ãããšãã§ããŸãããã·ã¹ãã ãµãŒãã¹ãšãããã€ããŒããããè¡ããã¹ãŠã®å Žæãç¥ã£ãŠããŸããïŒ ããŸããã ãã®ãããªå ŽæãèŠã€ããããšããŸãããããã©ãããã©ãŒã ã®ãœãŒã¹ã³ãŒãã®éãå€ãããŸãã ç§ãã¡ã¯åžžã«SDKã®ããã¥ã¡ã³ãã®æ¹åã«åãçµãã§ãããããã©ãŒãã³ã¹ã®ãã³ããè¿œå ããŠããŸãããéåžžã¯ã³ãŒãå ã®ã³ãŒããžã®ã©ã³ãã ã¢ã¯ã»ã¹ãèŠã€ããããã«StrictModeã«äŸåããŠããŸãã
ã¢ãã€ã«ããã€ã¹ã§ã®ãã£ã¹ã¯ã¢ã¯ã»ã¹
ã¡ãã£ãšåŸ ã£ãŠïŒ ãã£ã¹ã¯ã¢ã¯ã»ã¹ã§äœãåé¡ã«ãªããŸããïŒ çµå±ã®ãšããããã¹ãŠã®Androidããã€ã¹ã¯ãã©ãã·ã¥ã¡ã¢ãªã䜿çšããŸãã å¯åéšåã®ãªãã»ãŒè¶ é«éã®SSDã§ããïŒ ãããå¿é ããå¿ èŠã¯ãããŸãããïŒ æ®å¿µãªããããããŸããã
ã»ãšãã©ã®Androidããã€ã¹ã§äœ¿çšããããã¹ãŠã®ãã©ãã·ã¥ã³ã³ããŒãã³ããŸãã¯ãã¡ã€ã«ã·ã¹ãã ãé«éã§ãããšããäºå®ã«é Œãããšã¯ã§ããŸããã YAFFS-å€ãã®Androidããã€ã¹ã§äœ¿çšããããã¡ã€ã«ã·ã¹ãã ã¯ããã¹ãŠã®æäœã«å¯ŸããŠã°ããŒãã«ããã¯ãæã£ãŠããŸãã ããã€ã¹å šäœã§ã¯ãäžåºŠã«å®è¡ã§ããæäœã¯1ã€ã ãã§ãã éãæªããã°ãåçŽãªãçµ±èšãæäœã§ããæéããããããšããããŸãã åŸæ¥ã®ãã¡ã€ã«ã·ã¹ãã ãåããä»ã®ããã€ã¹ã«ããããšãã°ãã¬ããŒãžã³ã¬ã¯ã¿ãŒããã©ãã·ã¥ã¡ã¢ãªã解æŸããããã«é ãæäœã®å®è¡ãéå§ããããšã決å®ããå Žåãªã©ãå€ãã®æ¬ ç¹ããããŸãã ïŒãã®åé¡ã«ã€ããŠã¯ããã¡ãã§è©³ãã説æããŠããŸã ïŒ
äžèšã®ãã¹ãŠããã®çµè«ã¯æ¬¡ã®ãšããã§ããã¢ãã€ã«ããã€ã¹ã®ãã¡ã€ã«ã·ã¹ãã ã¯éåžžé«éã§ãããããã§ã90ïŒ ã®ã±ãŒã¹ã§ã¯é 延ãçºçãããšéåžžã«å€§ãããªããŸãã ããã«ãã»ãšãã©ã®ãã¡ã€ã«ã·ã¹ãã ã®ããã©ãŒãã³ã¹ã¯ããã£ã¹ã¯ã®ç©ºã容éãæžå°ãããšäœäžããŸãã ïŒGoogle I / O Zippy Androidã¢ããªã®ã¹ã©ã€ããã芧ãã ããïŒ
ã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ã¹ã¬ãã
éåžžãããŸããŸãªAndroidã³ãŒã«ããã¯ãšã©ã€ããµã€ã¯ã«ã€ãã³ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ã¹ã¬ããïŒå¥åUIã¹ã¬ããïŒã§åŠçãããŸãã ã»ãšãã©ã®å Žåãããã«ããäœæ¥ã楜ã«ãªããŸããããã¹ãŠã®ã¢ãã¡ãŒã·ã§ã³ãã¹ã¯ããŒã«ãªã©ããã®ã¹ã¬ããã§å®è¡ãããããã泚æããå¿ èŠããããŸãã
ã¢ãã¡ãŒã·ã§ã³ã60 fpsã§éå§ããã€ãã³ããïŒã¡ã€ã³ã¹ã¬ããã§ãïŒçªç¶çºçããå Žåããã®ã€ãã³ãã«å¿çããã³ãŒããå®è¡ããã®ã«16ããªç§ããããŸãã ããšãã°ããã£ã¹ã¯ãžã®æžã蟌ã¿æäœã®ããã«16ããªç§ãè¶ ããæéãè²»ãããšããã³ã°ããŸãã éåžžããã£ã¹ã¯ã¢ã¯ã»ã¹ã«ãããæéã¯16ããªç§ãããå€§å¹ ã«çããªããŸãããããã§ãªãå ŽåããããŸãã ããšãã°ãYAFFSãã¡ã€ã«ã·ã¹ãã ã®å ŽåãçŸåšæžã蟌ã¿ããã»ã¹ã®éäžã«ããå¥ã®ããã»ã¹ã«ãã£ãŠãã¡ã€ã«ã·ã¹ãã ãªãœãŒã¹ã解æŸãããŠããéåŸ æ©ãããšããŸãã
ãããã¯ãŒã¯æäœã¯ç¹ã«äœéã§äºæž¬äžèœã§ãããããã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ãããŒãããããã¯ãŒã¯ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããªãã§ãã ããã åãçç±ã§ãHoneycombã®ä»åŸã®ãªãªãŒã¹ã§ã¯ãã¡ã€ã³ã¹ã¬ããã®ãããã¯ãŒã¯ãªã¯ãšã¹ããèŽåœçãªãšã©ãŒã«ã€ãªããããã«äœæããŸããïŒã¢ããªã±ãŒã·ã§ã³ã«Honeycomb以åã®
targetSdkVersion
APIããŒãžã§ã³ãããå ŽåïŒã ãã®ãããHoneycombã®ãªãªãŒã¹ã«åããŠã¢ããªã±ãŒã·ã§ã³ãæºåããå Žåã¯ãUIã¹ããªãŒã ã§ãããã¯ãŒã¯èŠæ±ãè¡ããªãããã«ããŠãã ããã ïŒä»¥äžã®ãæ»ãããã®å¢å ããåç §ïŒã
StrictModeããªã³ã«ãã
StrictModeã®æšå¥šããã䜿çšæ¹æ³ã¯ãéçºããã»ã¹äžã«æå¹ã«ããåºåãåæããã¢ããªã±ãŒã·ã§ã³ããªãªãŒã¹ããåã«ç¡å¹ã«ããããšã§ãã
ããšãã°
onCreate()
ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ã³ã³ããŒãã³ãã®
onCreate()
å«ããããšãã§ããŸãã
public void onCreate() { if (DEVELOPER_MODE) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() .penaltyLog() .build()); } super.onCreate(); }
ãŸãã¯åã«ïŒ
public void onCreate() { if (DEVELOPER_MODE) { StrictMode.enableDefaults(); } super.onCreate(); }
åŸè ã®ã¡ãœããã¯ãGingerbread以åã®APIãåŒãç¶ã䜿çšã§ãããšåæã«ããªãã¬ã¯ã·ã§ã³ãŸãã¯ãã®ä»ã®ææ³ã䜿çšããŠStrictModeãç°¡åã«æå¹ã«ã§ããããã«ããããã«è¿œå ãããŸããã ããšãã°ãDonutïŒAndroid 1.6ïŒã
targetApi
ãšããŠæå®ã§ããŸãããGingerbreadããã€ã¹ãŸãã¯ãšãã¥ã¬ãŒã¿ãŒã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããå Žåã¯ãåŒãç¶ãStrictModeã䜿çšã§ããŸãã
StrictModeåæ
penaltyLog()
ã䜿çšããå Žåãããã©ã«ãã§ã¯ã
adb logcat
ãå®è¡ãã端æ«åºåãèªã¿åããŸãã ããªã·ãŒéåã¯ãã¹ãŠã³ã³ãœãŒã«ã«å ¥ããŸãã
ã³ãŒãå ã®çãããå ŽæãèŠã€ãããå Žåã¯ã
penaltyDropbox ()
æå¹ã«ãããšãStrictModeã¯ãã®åºåã
DropBoxManager
æžã蟌ã¿ãŸãããããããåŸã§
adb shell dumpsys dropbox data_app_strictmode --print
ã䜿çšããŠæœåºã§ããŸã
æ»ããããå¢ã
ã¹ããªãŒã ãšj
ava.util.concurrent.*
ã«å ããŠã
Handler
ã
AsyncTask
ã
AsyncQueryHandler
ã
AsyncTask
ãªã©ã®Android APIã䜿çšãããªãã·ã§ã³ããããŸãã
ç§ãã¡ã®çµéš
ãã©ãããã©ãŒã èªäœã®ã³ãŒãã«åãçµãã§ããéã«ãç§ãã¡ã¯æ¯æ¥ãããã°ããŒãããã«ããåãåãããããããŒã å šäœã§äœ¿çšãããŸããã Gingerbreadã®éçºããã»ã¹ã§ã¯ãStrictModeãæå¹ã«ããŠãã«ããæ¯æ¥åéããèŠã€ãã£ããã¹ãŠã®éåãèšé²ããŠããããªãåæãè¡ããŸããã 1æéããšã«MapReduceããã»ã¹ãèµ·åããããã¹ãŠã®éåãã¹ã¿ãã¯ãã¬ãŒã¹ïŒããã»ã¹éåŒã³åºããå«ãïŒãæéãçºçããããã»ã¹ããã³ããã±ãŒãžãªã©ãå«ãã€ã³ã¿ã©ã¯ãã£ãã¬ããŒããåéãããŸããã
StrictModeã®ããŒã¿ã䜿çšããŠãæ°çŸã®ãšã©ãŒãä¿®æ£ããã·ã¹ãã å šäœã§ã¢ãã¡ãŒã·ã§ã³ã®æ»ããããšå¿çæ§ãåäžãããŸããã Androidã«ãŒãã«ïŒã·ã¹ãã ãµãŒãã¹ããããã€ããŒãªã©ïŒãæé©åããŠãã·ã¹ãã å ã®ãã¹ãŠã®ããã°ã©ã ã«åœ¹ç«ã€ããã«ããã¢ããªã±ãŒã·ã§ã³ïŒAOSPãšGoogleã¢ããªã±ãŒã·ã§ã³ã®äž¡æ¹ïŒã§å€æ°ã®ãšã©ãŒãçŽæ¥ä¿®æ£ããŸããã ãŸã Froyoã䜿çšããŠããå Žåã§ããGMailãGoogleããããYouTubeã®ææ°ã®æŽæ°ã«ã¯ãStrictModeã䜿çšããŠåéãããããŒã¿ãåæããããšã§åŸãããããã©ãŒãã³ã¹ãæ¹åããä¿®æ£ãå«ãŸããŠããŸãã
ã·ã¹ãã ãèªåçã«é«éåã§ããªãã£ãå Žåãç¹å®ã®ãã¿ãŒã³ã®ã¢ããªã±ãŒã·ã§ã³ãããç°¡åãã€å¹ççã«ããããã®æ°ããAPIãè¿œå ããŸããã ããšãã°ã
commit()
'ohmã«ãã£ãŠè¿ãããå€ãå¿ èŠãªãå Žåã¯ã
commit()
代ããã«äœ¿çšããå¿ èŠãããæ°ãã
SharedPreferences.Editor.apply()
ã¡ãœããããããŸãïŒã»ãšãã©èª°ã䜿çšããªãããšãå€æããŠããŸãïŒã ãªãã¬ã¯ã·ã§ã³ã䜿çšããŠããã©ãããã©ãŒã ã®ããŒãžã§ã³ã«å¿ããŠ
apply()
ãŸãã¯
commit()
ã䜿çš
apply()
ããšãã©ã³ã¿ã€ã ã§çŽæ¥æ±ºå®ããããšãã§ããŸãã
FroyoããGingerbreadã«åãæ¿ãããŠãŒã¶ãŒã¯ãã·ã¹ãã ã®é«éåã«ã·ã§ãã¯ãåããŸããã ChromeããŒã ã®å人ãæè¿ãåæ§ã®æ©èœãè¿œå ããŸããã ãã¡ãããStrictModeã¯ã·ã¹ãã ã®é«éåã«é¢é£ãããã¹ãŠã®æ å ã奪ãããšã¯ã§ããŸãããæ°ããã¬ããŒãžã³ã¬ã¯ã¿ãŒãããã«å€§ããªåœ¹å²ãæãããŸããã
次ã¯ïŒ
StrictMode APIãšãã®æ©èœã¯é²åãç¶ããŸãã Honeycombã®StrictModeã«é¢é£ãããã®ã«ããã€ãã®ã¯ãŒã«ãªãã®ãè¿œå ããŸããããä»ã«äœãèŠãããæããŠãã ããïŒ stackoverflow.comã®ãstrictmodeãã¿ã°ã§è³ªåã«çããŸãã ãããããé¡ãããŸãïŒ