×÷Õß¼ò½é£ººú¿£¬ÌÚѶAndroid¹¤³Ìʦ£¬ÈȰ®¿ªÔ´Óë·ÖÏí£¬Î¬»¤Android¹Ù·½Åàѵ¿Î³ÌÐ×÷ÏîÄ¿£¬¹Ø×¢AndroidÓ¦ÓÃÐÔÄÜÓÅ»¯µÄ×ܽáÓë·ÖÏí£¬ÍÆ³çAndroid¹Ù·½×î¼Ñʵ¼ù¡£

AndroidÐÔÄÜÓÅ»¯µä·¶µÚ4¼¾µÄ¿Î³Ìѧϰ±Ê¼ÇÖÕÓÚÔÚ2015ÄêµÄ×îºóÒ»ÌìÍê³ÉÁË(²¢ÓÚ2016Äê1ÔÂ12ÈÕÕýʽ·¢²¼ÔÚCSDNÉÏ)£¬ÎÄÕ¹²17¸ö¶ÎÂ䣬°üº¬µÄÄÚÈÝ´óÖÂÓУºÓÅ»¯ÍøÂçÇëÇóµÄÐÐΪ£¬ÓÅ»¯°²×°°üµÄ×ÊÔ´Îļþ£¬ÓÅ»¯Êý¾Ý´«ÊäµÄЧÂÊ£¬ÐÔÄÜÓÅ»¯µÄ¼¸´ó»ù´¡ÔÀíµÈµÈ¡£ÒòΪѧϰÈÏ֪ˮƽÓÐÏÞ£¬¿Ï¶¨´æÔÚ²»ÉÙÀí½âÆ«²îÉõÖÁ´íÎóµÄµØ·½£¬Çë¶à¶à½»Á÷Ö¸Õý£¡
1) Cachematters for networking
ÏëҪʹµÃAndroidϵͳÉϵÄÍøÂç·ÃÎʲÙ×÷¸ü¼ÓµÄ¸ßЧ¾Í±ØÐë×öºÃÍøÂçÊý¾ÝµÄ»º´æ£¬ÕâÊÇÌá¸ßÍøÂç·ÃÎÊÐÔÄÜ×î»ù´¡µÄ²½ÖèÖ®Ò»¡£´ÓÊÖ»úµÄ»º´æÖÐÖ±½Ó¶ÁÈ¡Êý¾Ý¿Ï¶¨±È´ÓÍøÂçÉÏ»ñÈ¡Êý¾ÝÒª¸ü¼ÓµÄ±ã½Ý¸ßЧ£¬ÌرðÊǶÔÓÚÄÇЩ»á±»Æµ·±·ÃÎʵ½µÄÊý¾Ý£¬ÐèÒª°ÑÕâЩÊý¾Ý»º´æµ½É豸ÉÏ£¬ÒÔ±ã¸ü¼Ó¿ìËٵĽøÐзÃÎÊ¡£
AndroidϵͳÉϹØÓÚÍøÂçÇëÇóµÄHttp Response CacheÊÇĬÈϹرյģ¬ÕâÑù»áµ¼ÖÂÿ´Î¼´Ê¹ÇëÇóµÄÊý¾ÝÄÚÈÝÊÇÒ»ÑùµÄÒ²»áÐèÒªÖØ¸´±»µ÷ÓÃÖ´ÐУ¬Ð§ÂʵÍÏ¡£ÎÒÃÇ¿ÉÒÔͨ¹ýÏÂÃæµÄ´úÂëʾÀý¿ªÆôHttpResponseCache¡£

¿ªÆôHttp Response CacheÖ®ºó£¬Http²Ù×÷Ïà¹ØµÄ·µ»ØÊý¾Ý¾Í»á»º´æµ½ÎļþϵͳÉÏ£¬²»½ö½öÊÇÖ÷³ÌÐò×Ô¼º±àдµÄÍøÂçÇëÇóÏà¹ØµÄÊý¾Ý»á±»»º´æ£¬ÁíÍâÒýÈëµÄlibrary¿âÖеÄÍøÂçÏà¹ØµÄÇëÇóÊý¾ÝÒ²»á±»»º´æµ½Õâ¸öCacheÖС£
ÍøÂçÇëÇóµÄ³¡¾°ÓпÉÒÔÊÇÆÕͨµÄhttpÇëÇó£¬Ò²¿ÉÒÔ´ò¿ªÄ³¸öURLÈ¥»ñÈ¡Êý¾Ý£¬ÈçÏÂͼËùʾ£º

ÎÒÃÇÓÐÁ½ÖÖ·½Ê½À´Çå³ýHttpResponseCacheµÄ»º´æÊý¾Ý£ºµÚÒ»ÖÖ·½Ê½ÊÇ»º´æÒç³öµÄʱºòɾ³ý×î¾É×îÀϵÄÎļþ£¬µÚ¶þÖÖ·½Ê½ÊÇͨ¹ýHttp·µ»ØHeaderÖеÄCache-Control×Ö¶ÎÀ´½øÐпØÖƵġ£ÈçÏÂͼËùʾ£º

ͨ³£À´Ëµ£¬HttpResponseCache»á»º´æËùÓеķµ»ØÐÅÏ¢£¬°üÀ¨Êµ¼ÊµÄÊý¾ÝÓëHeaderµÄ²¿·Ö.Ò»°ãÇé¿öÏ£¬Õâ¸öCache»á×Ô¶¯¸ù¾ÝÐÒé·µ»ØCache-ControlµÄÄÚÈÝÓ뵱ǰ»º´æµÄÊý¾ÝÁ¿À´¾ö¶¨ÄÄЩÊý¾ÝÓ¦¸Ã¼ÌÐø±£Áô£¬ÄÄЩÊý¾ÝÓ¦¸Ãɾ³ý¡£µ«ÊÇÔÚһЩ¼«¶ËµÄÇé¿öÏ£¬ÀýÈç·þÎñÆ÷·µ»ØµÄÊý¾ÝûÓÐÉèÖÃCache·ÏÆúµÄʱ¼ä£¬»òÕßÊDZ¾µØµÄCacheÎļþϵͳÓë·µ»ØµÄ»º´æÊý¾ÝÓгåÍ»£¬»òÕßÊÇÄ³Ð©ÌØÊâµÄÍøÂç»·¾³µ¼ÖÂHttpResponseCache¹¤×÷Òì³££¬ÔÚÕâЩÇé¿öϾÍÐèÒªÎÒÃÇ×Ô¼ºÀ´ÊµÏÖHttpµÄ»º´æCache¡£
ʵÏÖ×Ô¶¨ÒåµÄhttp»º´æ£¬ÐèÒª½â¾öÁ½¸öÎÊÌ⣺µÚÒ»¸öÊÇʵÏÖÒ»¸öDiskCacheManager£¬ÁíÍâÒ»¸öÊÇÖÆ¶¨CacheµÄ»º´æ²ßÂÔ¡£¹ØÓÚDiskCacheManager£¬ÎÒÃÇ¿ÉÒÔÀ©Õ¹AndroidϵͳÌṩµÄDiskLruCacheÀ´ÊµÏÖ¡£¶øCacheµÄ»º´æ²ßÂÔ£¬Ïà¶ÔÀ´Ëµ¸´ÔÓһЩ£¬ÎÒÃÇ¿ÉÄÜÐèÒª°Ñ²¿·ÖJSONÊý¾ÝÉè¼Æ³É²»ÄÜ»º´æµÄ£¬ÁíÍâһЩJSONÊý¾ÝÉè¼Æ³É¿ÉÒÔ»º´æ¼¸ÌìµÄ£¬°ÑËõÂÔͼÉè¼Æ³É»º´æÒ»Á½ÌìµÄµÈµÈ£¬Îª²»Í¬µÄÊý¾ÝÀàÐ͸ù¾ÝËûÃǵÄʹÓÃÌØµãÖÆ¶¨²»Í¬µÄ»º´æ²ßÂÔ¡£

ÏëÒª±È½ÏºÃµÄʵÏÖÕâÁ½¼þÊÂÇ飬Èç¹ûÈ«²¿×Ô¼º´ÓÍ·¿ªÊ¼Ð´»á±È½Ï·±Ëö¸´ÔÓ£¬ËùÐÒµÄÊÇ£¬Óв»ÉÙÖøÃûµÄ¿ªÔ´¿ò¼Ü°ïÖúÎÒÃÇ¿ìËٵĽâ¾öÁËÄÇЩÎÊÌâ¡£ÎÒÃÇ¿ÉÒÔʹÓÃVolly¡¢okHTTP¡¢PicassoÀ´ÊµÏÖÍøÂ绺´æ¡£
ʵÏÖºÃÍøÂ绺´æÖ®ºó£¬ÎÒÃÇ¿ÉÒÔʹÓÃAndroid StudioÀïÃæµÄNetwork Traffic ToolsÀ´²é¿´ÍøÂçÊý¾ÝµÄÇëÇóÓë·µ»ØÇé¿ö£¬ÁíÍâÎÒÃÇ»¹¿ÉÒÔʹÓÃAT&T ARO¹¤¾ßÀ´×¥È¡ÍøÂçÊý¾Ý°ü½øÐзÖÎö²é¿´¡£
2) Optimizing Network Request Frequencies
Ó¦ÓóÌÐòµÄÒ»¸ö»ù´¡¹¦ÄÜÊÇÄܹ»±£³ÖÈ·±£½çÃæÉϳÊÏÖµÄÐÅÏ¢ÊǼ´Ê±×îеģ¬ÀýÈç³ÊÏÖ×îеÄÐÂÎÅ£¬ÌìÆø£¬ÐÅÏ¢Á÷µÈµÈÐÅÏ¢¡£µ«ÊÇ£¬¹ýÓÚÆµ·±µÄ´ÙʹÊÖ»ú¿Í»§¶ËÓ¦ÓÃȥͬ²½×îеķþÎñÆ÷Êý¾Ý»á¶ÔÐÔÄܲúÉúºÜ´óµÄ¸ºÃæÓ°Ï죬²»½ö½öʹµÃCPU²»Í£µÄÔÚ¹¤×÷£¬ÄÚ´æ£¬ÍøÂçÁ÷Á¿£¬µçÁ¿µÈµÈ¶¼»á³ÖÐøµÄ±»ÏûºÄ£¬ËùÒÔÔÚ½øÐÐÍøÂçÇëÇó²Ù×÷µÄʱºòÒ»¶¨Òª±ÜÃâ¶à¶Èͬ²½²Ù×÷¡£
Í˵½ºǫ́µÄÓ¦ÓÃΪÁËÄܹ»ÔÚÇл»»ØÇ°Ì¨µÄʱºò³ÊÏÖ×îеÄÊý¾Ý£¬»á͵͵ÔÚºǫ́²»Í£µÄ×öͬ²½µÄ²Ù×÷¡£ÕâÖÖÐÐΪ»á´øÀ´ºÜÑÏÖØµÄÎÊÌ⣬Ê×ÏÈÒòÎªÍøÂçÇëÇóµÄÐÐΪÒì³£µÄºÄµç£¬Æä´Î²»Í£µÄ½øÐÐÍøÂçͬ²½»áºÄ·ÑºÜ¶à´ø¿íÁ÷Á¿¡£
ΪÁËÄܹ»¾¡Á¿µÄ¼õÉÙ²»±ØÒªµÄͬ²½²Ù×÷£¬ÎÒÃÇÐèÒª×ñÊØÏÂÃæµÄһЩ¹æÔò£º
- Ê×ÏÈÎÒÃÇÒª¶ÔÍøÂçÐÐΪ½øÐзÖÀà£¬Çø·ÖÐèÒªÁ¢¼´¸üÐÂÊý¾ÝµÄÐÐΪºÍÆäËû¿ÉÒÔ½øÐÐÑӳٵĸüÐÂÐÐΪ£¬Îª²»Í¬µÄ³¡¾°½øÐвîÒ컯´¦Àí¡£
- Æä´ÎÒª±ÜÃâ¿Í»§¶Ë¶Ô·þÎñÆ÷µÄÂÖѯ²Ù×÷£¬ÕâÑù»áÀ˷ѺܶàµÄµçÁ¿Óë´ø¿íÁ÷Á¿¡£½â¾öÕâ¸öÎÊÌ⣬ÎÒÃÇ¿ÉÒÔʹÓÃGoogle Cloud MessageÀ´¶Ô¸üеÄÊý¾Ý½øÐÐÍÆËÍ¡£
- È»ºóÔÚijЩ±ØÐë×öͬ²½µÄ³¡¾°Ï£¬ÐèÒª±ÜÃâʹÓù̶¨µÄ¼ä¸ôƵÂÊÀ´½øÐиüвÙ×÷£¬ÎÒÃÇÓ¦¸ÃÔÚ·µ»ØµÄÊý¾ÝÎÞ¸üеÄʱºò£¬Ê¹ÓÃË«±¶µÄ¼ä¸ôʱ¼äÀ´½øÐÐÏÂÒ»´Îͬ²½¡£
- ×îºó¸ü½øÒ»²½£¬ÎÒÃÇ»¹¿ÉÒÔͨ¹ýÅжϵ±Ç°É豸µÄ״̬À´¾ö¶¨Í¬²½µÄƵÂÊ£¬ÀýÈçÅжÏÉ豸´¦ÓÚÐÝÃߣ¬Ô˶¯µÈ²»Í¬µÄ״̬Éè¼Æ¸÷×Ô²»Í¬Ê±¼ä¼ä¸ôµÄͬ²½ÆµÂÊ¡£

ÁíÍ⣬ÎÒÃÇ»¹¿ÉÒÔͨ¹ýÅжÏÉ豸ÊÇ·ñÁ¬½ÓÉÏWi-Fi£¬ÊÇ·ñÕýÔÚ³äµçÀ´¾ö¶¨¸üÐÂµÄÆµÂÊ¡£ÎªÁËÄܹ»·½±ãµÄʵÏÖÕâ¸ö¹¦ÄÜ£¬AndroidΪÎÒÃÇÌṩÁËGCMNetworkManagerÀ´ÅжÏÉ豸µ±ÏµÄ״̬£¬´Ó¶øÉè¼Æ¸ü¼Ó¸ßЧµÄÍøÂçͬ²½²Ù×÷£¬ÈçÏÂͼËùʾ£º

3) Effective Prefetching
¹ØÓÚÌáÉýÍøÂç²Ù×÷µÄÐÔÄÜ£¬³ýÁ˱ÜÃâÆµ·±µÄÍøÂçͬ²½²Ù×÷Ö®Í⣬»¹¿ÉÒÔʹÓÃÀ¦°óÅúÁ¿·ÃÎʵķ½Ê½À´¼õÉÙ·ÃÎÊµÄÆµÂÊ£¬ÎªÁË´ïµ½Õâ¸öÄ¿µÄ£¬ÎÒÃǾÍÐèÒªÁ˽âPrefetching¡£
¾Ù¸öÀý×Ó£¬ÔÚij¸ö³¡¾°Ï£¬Ò»¿ªÊ¼·¢³öÁËÍøÂçÇëÇóµÃµ½ÁËijÕÅͼƬ£¬¸ôÁË10sÖ®ºó£¬·¢³öµÚ¶þ´ÎÇëÇóÏëÒªÄõ½ÁíÍâÒ»ÕÅͼƬ£¬ÔÙ¸ôÁË6s·¢³öµÚÈýÕÅͼƬµÄÍøÂçÇëÇó¡£Õâ»áµ¼ÖÂÉ豸µÄÎÞÏß·äÎÑÒ»Ö±´¦ÓÚ¸ßÏûºÄµÄ״̬¡£Prefetching¾ÍÊÇÔ¤ÏÈÅж¨ÄÇЩ¿ÉÄÜÂíÉϾͻáʹÓõ½µÄÍøÂç×ÊÔ´£¬À¦°óÒ»Æð¼¯ÖнøÐÐÍøÂçÇëÇó¡£ÕâÑùÄܹ»¼«´óµÄ¼õÉÙµçÁ¿µÄÏûºÄ£¬ÌáÉýÉ豸µÄÐøº½Ê±¼ä¡£

ʹÓÃPrefetchingµÄÄѵãÔÚÓÚÈçºÎÅжÏÊÂÏÈ»ñÈ¡µÄÊý¾ÝÁ¿µ½µ×ÊǶàÉÙ£¬Èç¹ûԤȡµÄÊý¾ÝÁ¿Æ«ÉÙ£¬ÄÇô¾ÍÆð²»µ½Ê²Ã´Ð§¹û£¬µ«ÊÇÈç¹ûԤȡ¹ý¶à£¬ÓÖ¿ÉÄܵ¼Ö·ÃÎʵÄʱ¼ä¹ý³¤¡£

ÄÇôÎÊÌâÀ´ÁË£¬µ½µ×Ԥȡ¶àÉٲűȽϺÏÊÊÄØ£¿Ò»¸ö±È½ÏÆÕÊʵĹæÔòÊÇ£¬ÔÚ3GÍøÂçÏ¿ÉÒÔԤȡ1-5MBµÄÊý¾ÝÁ¿£¬»òÕßÊǰ´ÕÕÌáǰԤÆÚºóÐø1-2·ÖÖÓµÄÊý¾Ý×÷Ϊ»ùÏß±ê×¼¡£ÔÚʵ¼ÊµÄ²Ù×÷µ±ÖУ¬ÎÒÃÇ»¹ÐèÒª¿¼Âǵ±Ç°µÄÍøÂçËÙ¶ÈÀ´¾ö¶¨Ô¤È¡µÄÊý¾ÝÁ¿£¬ÀýÈçÔÚͬÑùµÄʱ¼äÏ£¬4GÍøÂç¿ÉÒÔ»ñÈ¡µ½12ÕÅͼƬµÄÊý¾Ý£¬¶ø2GÍøÂçÔòÖ»ÄÜÄõ½3ÕÅͼƬµÄÊý¾Ý¡£ËùÒÔ£¬ÎÒÃÇ»¹ÐèÒª°Ñµ±Ç°µÄÍøÂç»·¾³Çé¿öÌí¼Óµ½Éè¼ÆÔ¤È¡Êý¾ÝÁ¿µÄ²ßÂÔµ±ÖÐÈ¥¡£Åжϵ±Ç°É豸µÄ״̬ÓëÍøÂçÇé¿ö£¬¿ÉÒÔʹÓÃÇ°ÃæÌáµ½¹ýµÄGCMNetworkManager¡£
4) Adapting to Latency
ÍøÂçÑÓ³Ùͨ³£À´ËµºÜÈÝÒ×±»Óû§²ì¾õµ½£¬ÑÏÖØµÄÍøÂçÑÓ³Ù»á¶ÔÓû§ÌåÑéÔì³ÉºÜ´óµÄÓ°Ï죬Óû§ºÜÈÝÒ×±§Ô¹Ó¦ÓóÌÐòдµÄ²»ºÃ¡£
Ò»¸öµäÐ͵ÄÍøÂç²Ù×÷ÐÐΪ£¬Í¨³£°üº¬ÒÔϼ¸¸ö²½Ö裺Ê×ÏÈÊÖ»ú¶Ë·¢ÆðÍøÂçÇëÇ󣬵½´ïÍøÂç·þÎñÔËÓªÉ̵ĻùÕ¾£¬ÔÙ×ªÒÆµ½·þÎñÌṩÕߵķþÎñÆ÷ÉÏ£¬¾¹ý½âÂëÖ®ºó£¬½Ó×Å·ÃÎʱ¾µØµÄ´æ´¢Êý¾Ý¿â£¬»ñÈ¡µ½Êý¾ÝÖ®ºó£¬½øÐбàÂ룬×îºó°´ÕÕÔÀ´´«µÝµÄ·¾¶Öð²ã·µ»Ø¡£ÈçÏÂͼËùʾ£º

ÔÚÉÏÃæµÄÍøÂçÇëÇóÁ´Â·µ±ÖеÄÈκÎÒ»¸ö»·½Ú¶¼ÓпÉÄܵ¼ÖÂÑÏÖØµÄÑÓ³Ù£¬³ÉΪÐÔÄÜÆ¿¾±£¬µ«ÊÇÕâЩ»·½Ú¿ÉÄܳöÏÖµÄÎÊÌ⣬¿Í»§¶ËÓ¦ÓÃÊÇÎÞ·¨½øÐе÷½Ú¿ØÖƵģ¬Ó¦ÓÃÄܹ»×öµÄ¾ÍÖ»ÊǸù¾Ýµ±Ç°µÄÍøÂç»·¾³Ñ¡Ôñµ±ÏÂ×î¼ÑµÄ²ßÂÔÀ´½µµÍ³öÏÖÍøÂçÑӳٵĸÅÂÊ¡£Ö÷ÒªµÄʵʩ²½ÖèÓÐÁ½²½£ºµÚ1²½¼ì²âÊÕ¼¯µ±Ç°µÄÍøÂç»·¾³ÐÅÏ¢£¬µÚ2²½¸ù¾Ýµ±Ç°ÊÕ¼¯µ½µÄÐÅÏ¢½øÐÐÍøÂçÇëÇóÐÐΪµÄµ÷Õû¡£
¹ØÓÚµÚ1²½¼ì²âµ±Ç°µÄÍøÂç»·¾³£¬ÎÒÃÇ¿ÉÒÔʹÓÃϵͳÌṩµÄAPIÀ´»ñÈ¡µ½Ïà¹ØµÄÐÅÏ¢£¬ÈçÏÂͼËùʾ£º

ͨ¹ýÉÏÃæµÄʾÀý£¬ÎÒÃÇ¿ÉÒÔ»ñÈ¡µ½Òƶ¯ÍøÂçµÄÏêϸ×ÓÀàÐÍ£¬ÀýÈç4G(LTE)¡¢3GµÈµÈ£¬Ïêϸ·ÖÀà¼ûÏÂͼ£¬»ñÈ¡µ½ÏêϸµÄÒÆ¶¯ÍøÂçÀàÐÍÖ®ºó£¬ÎÒÃÇ¿ÉÒÔ¸ù¾Ýµ±Ç°ÍøÂçµÄËÙÂÊÀ´µ÷ÕûÍøÂçÇëÇóµÄÐÐΪ£º

¹ØÓÚµÚ2²½¸ù¾ÝÊÕ¼¯µ½µÄÐÅÏ¢½øÐвßÂԵĵ÷Õû£¬Í¨³£À´Ëµ£¬ÎÒÃÇ¿ÉÒÔ°ÑÍøÂçÇëÇóÑÓ³Ù»®·ÖΪÈýµµ£ºÀýÈç°ÑÍøÂçÑÓ³ÙСÓÚ60msµÄ»®·ÖΪGOOD£¬´óÓÚ220msµÄ»®·ÖΪBAD£¬½éÓÚÁ½ÕßÖ®¼äµÄ»®·ÖΪOK£¨ÕâÀïµÄ60ms¡¢220ms»áÐèÒª¸ù¾Ý²»Í¬µÄ³¡¾°Ìáǰ½øÐÐÔ¤ËãÍÆ²â£©¡£Èç¹ûÍøÂçÑÓ³ÙÊôÓÚGOODµÄ·¶³ë£¬ÎÒÃǾͿÉÒÔ×ö¸ü¶à±È½Ï¼¤½øµÄԤȡÊý¾ÝµÄ²Ù×÷£¬Èç¹ûÍøÂçÑÓ³ÙÊôÓÚBADµÄ·¶³ë£¬ÎÒÃǾÍÓ¦¸Ã¿¼Âǰѵ±ÏµÄÍøÂçÇëÇó²Ù×÷HoldסµÈ´ýÍøÂç×´¿ö»Ö¸´µ½GOODµÄ״̬ÔÙ½øÐд¦Àí¡£

Ç°ÃæÌᵽ˵60ms¡¢220msÊÇÐèÒªÌáǰ×Ô¼ºÔ¤²âµÄ£¬¿ÉÊÇÔ¤²âµÄ¹¤×÷Ï൱¸´ÔÓ¡£Ê×ÏÈÕë¶Ô²»Í¬µÄ»úÆ÷ÓëÍøÂç»·¾³£¬ÍøÂçÑÓ³ÙµÄÈýµµãÐÖµ¶¼²»Ì«Ò»Ñù£¬³öÏֵĸÅÂÊÒ²²»¾¡Ïàͬ£¬ÎÒÃÇ»áÐèÒªÕë¶ÔÕâЩ²»Í¬µÄÓû§ÓëÉ豸ѡÔñ²»Í¬µÄãÐÖµ½øÐвîÒ컯´¦Àí£º

Android¹Ù·½ÎªÁ˰ïÖúÎÒÃÇÉè¼Æ×Ô¼ºµÄÍøÂçÇëÇó²ßÂÔ£¬ÌṩÁËÄ£ÄâÆ÷µÄÍøÂçÁ÷Á¿¿ØÖƹ¦ÄÜÀ´¶Ôʵ¼Ê»·¾³½øÐÐÄ£Äâ²âÁ¿£¬»òÕß»¹¿ÉÒÔʹÓÃAT&TÌṩµÄAT&T Network AttenuatorÀ´°ïÖúÔ¤¹ÀÍøÂçÑÓ³Ù¡£
5) Minimizing Asset Payload
ΪÁËÄܹ»¼õÐ¡ÍøÂç´«ÊäµÄÊý¾ÝÁ¿£¬ÎÒÃÇÐèÒª¶Ô´«ÊäµÄÊý¾Ý×öѹËõµÄ´¦Àí£¬ÕâÑùÄܹ»Ìá¸ßÍøÂç²Ù×÷µÄÐÔÄÜ¡£Ê×ÏȲ»Í¬µÄÍøÂç»·¾³£¬ÏÂÔØËÙ¶ÈÒÔ¼°ÍøÂçÑÓ³ÙÊÇ´æÔÚ²îÒìµÄ£¬ÈçÏÂͼËùʾ£º

Èç¹ûÎÒÃÇÑ¡ÔñÔÚÍøËÙ¸üµÍµÄÍøÂç»·¾³Ï½øÐÐÊý¾Ý´«Ê䣬Õâ¾ÍÒâζ×ÅÐèÒªÖ´Ðиü³¤µÄʱ¼ä£¬¶ø¸ü³¤µÄÍøÂç²Ù×÷ÐÐΪ£¬»áµ¼ÖµçÁ¿ÏûºÄ¸ü¼ÓÑÏÖØ¡£ÁíÍâ´«ÊäµÄÊý¾ÝÈç¹û²»×öѹËõ´¦Àí£¬Ò²Í¬Ñù»áÔö¼ÓÍøÂç´«ÊäµÄʱ¼ä£¬ÏûºÄ¸ü¶àµÄµçÁ¿¡£²»½öÈç´Ë£¬Î´¾¹ýѹËõµÄÊý¾Ý£¬Ò²»áÏûºÄ¸ü¶àµÄÁ÷Á¿£¬Ê¹µÃÓû§ÐèÒª¸¶³ö¸ü¶àµÄÁ÷Á¿·Ñ¡£
ͨ³£À´Ëµ£¬ÍøÂç´«ÊäÊý¾ÝÁ¿µÄ´óСÖ÷ÒªÓÉÁ½²¿·Ö×é³É£ºÍ¼Æ¬ÓëÐòÁл¯µÄÊý¾Ý£¬ÄÇôÎÒÃÇÐèÒª×öµÄ¾ÍÊǼõÉÙÕâÁ½²¿·ÖµÄÊý¾Ý´«Êä´óС£¬·ÖÏÂÃæÁ½¸ö·½ÃæÀ´ÌÖÂÛ¡£
- A)Ê×ÏÈÐèÒª×öµÄÊǼõÉÙͼƬµÄ´óС£¬Ñ¡ÔñºÏÊʵÄͼƬ±£´æ¸ñʽÊǵÚÒ»²½¡£ÏÂͼչʾÁËPNG,JPEG,WEBPÈýÖÖÖ÷Á÷¸ñʽÔÚÕ¼ÓÿռäÓëͼƬÖÊÁ¿Ö®¼äµÄ¶Ô±È£º

¶ÔÓÚJPEGÓëWEBP¸ñʽµÄͼƬ£¬²»Í¬µÄÇåÎú¶È¶ÔÕ¼ÓÿռäµÄ´óСҲ»á²úÉúºÜ´óµÄÓ°Ï죬Êʵ±µÄ¼õÉÙJPG Quality£¬¿ÉÒÔ´ó´óµØËõСͼƬռÓõĿռä´óС¡£
ÁíÍ⣬ÎÒÃÇÐèҪΪ²»Í¬µÄʹÓó¡¾°Ìṩµ±Ç°³¡¾°ÏÂ×îºÏÊʵÄͼƬ´óС£¬ÀýÈçÕë¶ÔÈ«ÆÁÏÔʾµÄÇé¿öÎÒÃÇ»áÐèÒªÒ»ÕÅÇåÎú¶È±È½Ï¸ßµÄͼƬ£¬¶øÈç¹ûÖ»ÊÇÏÔʾΪËõÂÔͼµÄÐÎʽ£¬¾ÍÖ»ÐèÒª·þÎñÆ÷Ìṩһ¸öÏà¶ÔÇåÎú¶ÈµÍºÜ¶àµÄͼƬ¼´¿É¡£·þÎñÆ÷Ó¦¸ÃÖ§³Öµ½Îª²»Í¬µÄʹÓó¡¾°·Ö±ð×¼±¸¶àÌ×ÇåÎú¶È²»Ò»ÑùµÄͼƬ£¬ÒÔ±ãÔÚ¶ÔÓ¦µÄ³¡¾°ÏÂÄܹ»»ñÈ¡µ½×îÊʺÏ×Ô¼ºµÄͼƬ¡£ÕâËäÈ»»áÔö¼Ó·þÎñ¶ËµÄ¹¤×÷Á¿£¬¿ÉÊÇÕâ¸ö¸¶³öÈ´Ê®·ÖÖµµÃ£¡
- B)Æä´ÎÐèÒª×öµÄÊǼõÉÙÐòÁл¯Êý¾ÝµÄ´óС¡£JSONÓëXMLΪÁËÌá¸ß¿É¶ÁÐÔ£¬ÔÚÎļþÖмÓÈëÁË´óÁ¿µÄ·ûºÅ£¬¿Õ¸ñµÈµÈ×Ö·û£¬¶øÕâЩ×Ö·û¶ÔÓÚ³ÌÐòÀ´ËµÊÇûÓÐÈκÎÒâÒåµÄ¡£ÎÒÃÇÓ¦¸ÃʹÓÃProtocal Buffers£¬Nano-Proto-Buffers£¬FlatBufferÀ´¼õСÐòÁл¯µÄÊý¾ÝµÄ´óС¡£
AndroidϵͳΪÎÒÃÇÌṩÁ˹¤¾ßÀ´²é¿´ÍøÂç´«ÊäµÄÊý¾ÝÇé¿ö£¬´ò¿ªAndroid StudioµÄMonitor£¬ÀïÃæÓÐÍøÂç·ÃÎʵÄÄ£¿é¡£»òÕßÊÇ´ò¿ªAT&TÌṩµÄARO¹¤¾ßÀ´²é¿´ÍøÂçÇëÇó״̬¡£
6) Service Performance Patterns
ServiceÊÇAndroid³ÌÐòÀïÃæ×î³£ÓõĻù´¡×é¼þÖ®Ò»£¬µ«ÊÇʹÓÃServiceºÜÈÝÒ×ÒýÆðµçÁ¿µÄ¹ý¶ÈÏûºÄÒÔ¼°ÏµÍ³×ÊÔ´µÄδ¼°Ê±ÊÍ·Å¡£Ñ§»áÔÚºÎʱÆôÓÃServiceÒÔ¼°Ê¹ÓúÎÖÖ·½Ê½É±µôService¾ÍÏÔµÃÊ®·ÖÓбØÒªÁË¡£
¼òÒª¹ýÒ»ÏÂServiceµÄÌØÐÔ£ºServiceºÍUIûÓйØÁª£¬ServiceµÄ´´½¨£¬Ö´ÐУ¬Ïú»ÙService¶¼ÊÇÐèÒªÕ¼ÓÃϵͳʱ¼äºÍÄÚ´æµÄ¡£ÁíÍâServiceÊÇĬÈÏÔËÐÐÔÚUIÏ̵߳ģ¬ÕâÒâζ×ÅService¿ÉÄÜ»áÓ°Ï쵽ϵͳµÄÁ÷³©¶È¡£
ʹÓÃServiceÓ¦¸Ã×ñÑÏÂÃæµÄһЩ¹æÔò£º
- ±ÜÃâ´íÎóµÄʹÓÃService£¬ÀýÈçÎÒÃDz»Ó¦¸ÃʹÓÃServiceÀ´¼àÌýijЩʼþµÄ±ä»¯£¬²»Ó¦¸Ã¸ãÒ»¸öServiceÔÚºǫ́¶Ô·þÎñÆ÷²»¶ÏµÄ½øÐÐÂÖѯ(Ó¦¸ÃʹÓÃGoogle Cloud Messaging)
- Èç¹ûÒѾÊÂÏÈÖªµÀServiceÀïÃæµÄÈÎÎñÓ¦¸ÃÖ´ÐÐÔÚºǫ́Ïß³Ì(·ÇĬÈϵÄÖ÷Ïß³Ì)µÄʱºò£¬ÎÒÃÇÓ¦¸ÃʹÓÃIntentService»òÕß½áºÏHanderThread£¬AsycnTask LoaderʵÏÖµÄService¡£
AndroidϵͳΪÎÒÃÇÌṩÁËÒÔϵÄһЩÒì²½Ïà¹ØµÄ¹¤¾ßÀà
- GCM
- BroadcastReciever
- LocalBroadcastReciever
- WakefulBroadcastReciver
- HandlerThreads
- AsyncTaskLoaders
- IntentService
Èç¹ûʹÓÃÉÏÃæµÄÖî¶à·½°¸»¹ÊÇÎÞ·¨Ìæ´úÆÕͨµÄService£¬ÄÇôÐèҪעÒâµÄ¾ÍÊÇÈçºÎÕýÈ·µÄ¹Ø±ÕService¡£
- ÆÕͨµÄStarted Service£¬ÐèҪͨ¹ýstopSelf()À´Í£Ö¹Service£»

- ÁíÍâÒ»ÖÖBound Service£¬»áÔÚÆäËû×é¼þ¶¼unBindÖ®ºó×Ô¶¯¹Ø±Õ×Ô¼º¡£

°ÑÉÏÃæÁ½ÖÖService½øÐкϲ¢Ö®ºó£¬ÎÒÃÇ¿ÉÒԵõ½ÈçÏÂͼËùʾµÄService

7) Removing unused code
ʹÓõÚÈý·½¿â(library)¿ÉÒÔÔÚ²»ÓÃ×Ô¼º±àд´óÁ¿´úÂëµÄǰÌáϰïÖúÎÒÃǽâ¾öһЩÄÑÌ⣬½ÚÔ¼´óÁ¿µÄʱ¼ä£¬µ«ÊÇÕâЩÒýÈëµÄµÚÈý·½¿âºÜ¿ÉÄܻᵼÖÂÖ÷³ÌÐò´úÂëÓ·Ö×ÈßÓà¡£
Èç¹ûÎÒÃÇ´¦ÔÚÈËÁ¦¡¢²ÆÁ¦¶¼Ïà¶ÔØÑ·¦µÄÇé¿öÏ£¬Í¨³£»áÇãÏò´óÁ¿Ê¹ÓõÚÈý·½¿âÀ´°ïÖú±àдӦÓóÌÐò¡£ÕâÆäʵÊÇÎ޿ɺñ·ÇµÄ£¬ÄÇÐ©ÖøÃûµÄµÚÈý·½¿âµÄ¿ÉÐÐÐÔÔç¾Í±»ºÜ¶àÓ¦ÓÃËù²ÉÓò¢Êµ¼ùÖ¤Ã÷¹ý¡£µ«ÊÇÕâÀïÃæ´æÔÚµÄÎÊÌâÊÇ£¬Èç¹ûÎÒÃÇÒòΪֻÐèҪij¸ölibraryµÄһС²¿·Ö¹¦Äܶø°ÑÕû¸ölibrary¶¼µ¼Èë×Ô¼ºµÄÏîÄ¿£¬Õâ¾Í»áÒýÆð´úÂëÓ·Öס£Ò»µ©·¢Éú´úÂëÓ·Ö×£¬Óû§¾Í»áÏÂÔØµ½°²×°°üÆ«´óµÄÓ¦ÓóÌÐò£¬ÁíÍâÒòΪ´úÂëÓ·Ö×£¬»¹ºÜÓпÉÄܻᳬ¹ýµ¥¸ö±àÒëÎļþÖ»ÄÜÓÐ65536¸ö·½·¨µÄÉÏÏÞ¡£½â¾öÕâ¸öÎÊÌâµÄ°ì·¨ÊÇʹÓÃMultiDexµÄ·½°¸£¬¿ÉÊÇÕâʵÔÚÊÇÎÞÄÎÖ®¾Ù£¬ÔÔòÉÏ£¬ÎÒÃÇ»¹ÊÇÓ¦¸Ã¾¡Á¿±ÜÃâ³öÏÖÕâÖÖÇé¿ö¡£
AndroidΪÎÒÃÇÌṩÁËProguardµÄ¹¤¾ßÀ´°ïÖúÓ¦ÓóÌÐò¶Ô´úÂë½øÐÐÊÝÉí£¬ÓÅ»¯£¬»ìÏýµÄ´¦Àí¡£Ëü»á°ïÖúÒÆ³ýÄÇЩûÓÐʹÓõ½µÄ´úÂ룬»¹¿ÉÒÔ¶ÔÀàÃû£¬·½·¨Ãû½øÐлìÏý´¦ÀíÒÔ±ÜÃâ³ÌÐò±»·´±àÒë¡£¾Ù¸öÀý×Ó£¬Google I/O 2015Õâ¸öÓ¦ÓÃʹÓÃÁË´óÁ¿µÄlibrary£¬Ã»Óо¹ýProguard´¦Àí֮ǰ±àÒë³öÀ´µÄ°üÊÇ8.4Mb´óС£¬¾¹ý´¦ÀíÖ®ºóµÄ°ü½ö½öÊÇ4.1Mb´óС¡£
ʹÓÃProguardÏ൱µÄ¼òµ¥£¬Ö»ÐèÒªÔÚbuild.gradleÎļþÖÐÅäÖÃminifEnableΪtrue¼´¿É£¬ÈçÏÂͼËùʾ£º

µ«ÊÇProguard»¹ÊDz»×ã¹»´ÏÃ÷µ½Äܹ»ÅжÏÄÄЩÀ࣬ÄÄЩ·½·¨ÊDz»Äܹ»±»»ìÏýµÄ£¬Õë¶ÔÕâЩÇé¿ö£¬ÎÒÃÇÐèÒªÊÖ¶¯µÄ°ÑÕâЩÐèÒª±£ÁôµÄÀàÃûÓë·½·¨ÃûÌí¼Óµ½ProguardµÄÅäÖÃÎļþÖУ¬ÈçÏÂͼËùʾ£º

ÔÚʹÓÃlibraryµÄʱºò£¬ÐèÒªÌØ±ð×¢ÒâÕâЩlibraryÔÚproguardÅäÖÃÉϵÄ˵Ã÷Îĵµ£¬ÎÒÃÇÐèÒª°ÑÕâЩÅäÖÃÐÅÏ¢Ìí¼Óµ½×Ô¼ºµÄÖ÷ÏîÄ¿ÖС£¹ØÓÚProguardµÄÏêϸ˵Ã÷£¬Çë¿´¹Ù·½Îĵµhttp://developer.android.com/tools/help/proguard.html
8) Removing unused resources
¼õÉÙAPK°²×°°üµÄ´óСҲÊÇAndroid³ÌÐòÓÅ»¯ÖкÜÖØÒªµÄÒ»¸ö·½Ã棬ÎÒÃDz»Ó¦¸Ã¸øÓû§ÏÂÔØµ½Ò»¸öÓ·Ö׵ݲװ°ü¡£¼ÙÉèÕâÑùÒ»¸ö³¡¾°£¬ÎÒÃÇÒýÈëÁËGoogle Play ServiceµÄlibrary£¬ÊÇÏëҪʹÓÃÀïÃæµÄMapsµÄ¹¦ÄÜ£¬µ«ÊÇÀïÃæµÄµÇÈëµÈµÈÆäËû¹¦ÄÜÊDz»ÐèÒªµÄ£¬¿ÉÊÇÕâЩ¹¦ÄÜÏà¹ØµÄ´úÂëÓëͼƬ×ÊÔ´£¬²¼¾Ö×ÊÔ´Èç¹ûÒ²±»ÒýÈëÎÒÃǵÄÏîÄ¿£¬ÕâÑù¾Í»áµ¼ÖÂÎÒÃǵijÌÐò°²×°°üÓ·Öס£
ËùÐÒµÄÊÇ£¬ÎÒÃÇ¿ÉÒÔʹÓÃGradleÀ´°ïÖúÎÒÃÇ·ÖÎö´úÂ룬·ÖÎöÒýÓõÄ×ÊÔ´£¬¶ÔÓÚÄÇЩûÓб»ÒýÓõ½µÄ×ÊÔ´£¬»áÔÚ±àÒë½×¶Î±»ÅųýÔÚAPK°²×°°üÖ®Í⣬ҪʵÏÖÕâ¸ö¹¦ÄÜ£¬¶ÔÎÒÃÇÀ´Ëµ½ö½öÖ»ÐèÒªÔÚbuild.gradleÎļþÖÐÅäÖÃshrinkResourceΪtrue¾ÍºÃÁË£¬ÈçÏÂͼËùʾ£º

ΪÁ˸¨Öúgradle¶Ô×ÊÔ´½øÐÐÊÝÉí£¬»òÕßÊÇijЩʱºòµÄÌØÊâÐèÒª£¬ÎÒÃÇ¿ÉÒÔͨ¹ýtools:keep»òÕßÊÇtools:discard±êÇ©À´ÊµÏÖ¶ÔÌØ¶¨×ÊÔ´µÄ±£ÁôÓë·ÏÆú£¬ÈçÏÂͼËùʾ£º

GradleĿǰÎÞ·¨¶Ôvalues£¬drawableµÈ¸ù¾ÝÔËÐÐʱÀ´¾ö¶¨Ê¹ÓõÄ×ÊÔ´½øÐÐÓÅ»¯£¬¶ÔÓÚÕâЩ×ÊÔ´£¬ÐèÒªÎÒÃÇ×Ô¼ºÀ´È·±£×ÊÔ´²»»áÓÐÈßÓà¡£
9) Perf Theory: Caching
µ±ÎÒÃÇÌÖÂÛÐÔÄÜÓÅ»¯µÄʱºò£¬»º´æÊÇ×î³£¼û×îÓÐЧµÄ²ßÂÔÖ®Ò»¡£ÎÞÂÛÊÇΪÁËÌá¸ßCPUµÄ¼ÆËãËÙ¶È»¹ÊÇÌá¸ßÊý¾ÝµÄ·ÃÎÊËÙ¶È£¬ÔÚ¾ø´ó¶àÊýµÄ³¡¾°Ï£¬ÎÒÃǶ¼»áʹÓõ½»º´æ¡£¹ØÓÚ»º´æÊÇÈçºÎÌá¸ßЧÂʵģ¬ÕâÀï¾Í²»×¸ÊöÁË¡£
ÄÇôÔÚʲôµØ·½£¬ÔÚºÎʱӦ¸ÃÀûÓúûº´æÀ´Ìá¸ßЧÂÊÄØ£¿Çë¿´ÏÂÃæµÄÀý×Ó£¬ºÜÃ÷ÏÔµÄÑÝʾÁËÔÚijЩϸ½ÚÉÏÊÇÈçºÎÀûÓûº´æµÄÔÀíÀ´Ìá¸ß´úÂëµÄÖ´ÐÐЧÂʵģº


ÀàËÆÉÏÃæµÄÀý×Ó²ÉÓûº´æÔÀíµÄµØ·½»¹Óкܶ࣬ÀýÈ绺´æµ½ÄÚ´æÀïÃæµÄͼƬ×ÊÔ´£¬ÍøÂçÇëÇó·µ»ØÊý¾ÝµÄ»º´æµÈµÈ¡£×ÜÖ®£¬Ê¹Óûº´æ¾ÍÊÇΪÁ˼õÉÙ²»±ØÒªµÄ²Ù×÷£¬¾¡Á¿¸´ÓÃÒÑÓеĶÔÏóÀ´Ìá¸ßЧÂÊ¡£
10) Perf Theory: Approximation(½üËÆ·¨)
ºÜ¶àʱºò£¬ÎÒÃǶ¼ÐèҪѧ»áÔÚÐÔÄܸüÓÅÓëÌåÑé¸üºÃÖ®¼ä×öÒ»¶¨µÄȨºâÈ¡ÉᡣΪÁË»ñÈ¡¸üºÃµÄ±íÏÖÐÔÄÜ£¬ÎÒÃÇ¿ÉÄÜ»áÐèÒªÎþÉüһЩÓû§ÌåÑ飬ÀýÈç°ÑijЩϸ½Ú×öɾ³ý»òÕßÊǽµ¼¶´¦ÀíÒÔ±ãÓиüºÃµÄÐÔÄÜ¡£ÀýÈ磬µ¼º½ÀàµÄÓ¦Óã¬Èç¹ûÔÚµ¼º½ÆÚ¼äÊDz»Í£µÄÖ´Ðж¨Î»µÄ²Ù×÷£¬ÕâÑùÄܹ»ºÜ¼°Ê±µÄ»ñÈ¡µ½×îеÄλÖÃÐÅÏ¢ÒÔ¼°µ±ÏÂλÖÃÏà¹ØµÄÆäËûÌáʾÐÅÏ¢£¬µ«ÊÇÕâÑù»áµ¼ÖÂÍøÂçÁ÷Á¿ÒÔ¼°ÊÖ»úµçÁ¿µÄ¹ý¶ÈÏûºÄ¡£ËùÒÔÎÒÃÇ¿ÉÒÔ×öÒ»¶¨µÄ½µ¼¶´¦Àí£¬Ã¿¸ô¹Ì¶¨µÄÒ»¶Îʱ¼ä²ÅÈ¥»ñȡһ´ÎλÖÃÐÅÏ¢£¬Ëðʧһµã¼°Ê±ÐÔÀ´»»È¡¸ü³¤µÄÐøº½Ê±¼ä¡£
»¹ÓÐºÜ¶àµØ·½¶¼»áÓõ½½üËÆ·¨ÔòÀ´ÓÅ»¯³ÌÐòµÄÐÔÄÜ£¬ÀýÈçʹÓÃÒ»ÕűȽϽӽüʵ¼Ê´óСµÄͼƬÀ´Ìæ´úÔͼ£¬»»È¡¸ü¿ìµÄ¼ÓÔØËÙ¶È¡£ËùÒÔ¶ÔÓÚÄÇЩ¶Ô¼ÆËã½á¹ûÒªÇó²»ÐèҪʮ·Ö¾«È·µÄ³¡¾°£¬ÎÒÃÇ¿ÉÒÔʹÓýüËÆ·¨ÔòÀ´Ìá¸ß³ÌÐòµÄÐÔÄÜ¡£
11) Perf Theory: Culling(åàÑ¡£¬ÌôÑ¡)
ÔÚÒÔǰµÄÐÔÄÜÓÅ»¯¿Î³ÌÀïÃæ£¬ÎÒÃÇÖªµÀ¿ÉÒÔͨ¹ý¼õÉÙOverdrawÀ´Ìá¸ß³ÌÐòµÄäÖȾÐÔÄÜ£¨Ö÷ÒªÊÖ¶ÎÓÐÒÆ³ý·Ç±ØÐëµÄbackground£¬¼õÉÙÖØµþµÄ²¼¾Ö£¬Ê¹ÓÃclipRectÀ´Ìá¸ß×Ô¶¨ÒåViewµÄ»æÖÆÐÔÄÜ£©£¬½ñÌìÔÚÕâÀïÒª½éÉܵÄÁíÍâÒ»¸öÌá¸ßÐÔÄܵķ½·¨ÊÇÖð²½¶ÔÊý¾Ý½øÐйýÂËɸѡ£¬¼õСËÑË÷µÄÊý¾Ý¼¯£¬ÒÔ´ËÌá¸ß³ÌÐòµÄÖ´ÐÐÐÔÄÜ¡£ÀýÈçÎÒÃÇÐèÒªËÑË÷µ½¾ÓסÔÚij¸öµØ·½£¬ÄêÁäÊǶàÉÙ£¬·ûºÏÄ³Ð©ÌØ¶¨Ìõ¼þµÄºòÑ¡ÈË£¬¾Í¿ÉÒÔͨ¹ýÖð²ã¹ýÂËɸѡµÄ·½Ê½À´Ìá¸ßºóÐøËÑË÷µÄÖ´ÐÐЧÂÊ¡£
12) Perf Theory: Threading
ʹÓöàÏ̲߳¢·¢´¦ÀíÈÎÎñ£¬´ÓijÖ̶ֳÈÉÏ¿ÉÒÔ¿ìËÙÌá¸ß³ÌÐòµÄÖ´ÐÐÐÔÄÜ¡£¶ÔÓÚAndroid³ÌÐòÀ´Ëµ£¬Ö÷Ïß³Ìͨ³£Ò²³ÉΪUIỊ̈߳¬ÐèÒª´¦ÀíUIµÄäÖȾ£¬ÏìÓ¦Óû§µÄ²Ù×÷µÈµÈ¡£¶ÔÓÚÄÇЩ¿ÉÄÜÓ°Ïìµ½UIÏ̵߳ÄÈÎÎñ¶¼ÐèÒªÌØ±ðÁôÒâÊÇ·ñÓбØÒª·Åµ½ÆäËûµÄÏß³ÌÀ´½øÐд¦Àí¡£Èç¹û´¦Àí²»µ±£¬ºÜÓпÉÄÜÒýÆð³ÌÐòANR¡£¹ØÓÚ¶àÏ̵߳ÄʹÓý¨Ò飬¿ÉÒԲο¼¹Ù·½µÄÅàѵ¿Î³Ìhttp://developer.android.com/training/best-background.html
13) Perf Theory: Batching
¹ØÓÚBatching£¬ÔÚǰ¼¸¼¾µÄÐÔÄÜÓÅ»¯¿Î³ÌÀïÃæÒ²²»Ö¹Ò»´ÎÌáµ½£¬ÏÂÃæÊ¹ÓÃÒ»ÕÅͼÑÝʾÏÂBatchingµÄÔÀí£º

ÍøÂçÇëÇóµÄÅúÁ¿Ö´ÐÐÊÇÁíÍâÒ»¸ö±È½ÏÊʺÏ˵Ã÷batchingʹÓó¡¾°µÄÀý×Ó£¬ÒòΪÿ´Î·¢ÆðÍøÂçÇëÇó¶¼Ïà¶ÔÀ´Ëµ±È½ÏºÄʱºÄµç£¬Èç¹ûÄܹ»×öµ½ÅúÁ¿Ò»ÆðÖ´ÐУ¬¿ÉÒÔ´ó´óµÄ¼õÉÙµçÁ¿µÄÏûºÄ¡£

14) Serialization performance
Êý¾ÝµÄÐòÁл¯ÊdzÌÐò´úÂëÀïÃæ±Ø²»¿ÉÉÙµÄ×é³É²¿·Ö£¬µ±ÎÒÃÇÌÖÂÛµ½Êý¾ÝÐòÁл¯µÄÐÔÄܵÄʱºò£¬ÐèÒªÁ˽âÓÐÄÄЩºòÑ¡µÄ·½°¸£¬ËûÃǸ÷×ÔµÄÓÅȱµãÊÇʲô¡£Ê×ÏÈʲôÊÇÐòÁл¯£¿ÓÃÏÂÃæµÄͼÀ´½âÊÍһϣº

Êý¾ÝÐòÁл¯µÄÐÐΪ¿ÉÄÜ·¢ÉúÔÚÊý¾Ý´«µÝ¹ý³ÌÖеÄÈκν׶Σ¬ÀýÈçÍøÂç´«Ê䣬²»Í¬½ø³Ì¼äÊý¾Ý´«µÝ£¬²»Í¬ÀàÖ®¼äµÄ²ÎÊý´«µÝ£¬°ÑÊý¾Ý´æ´¢µ½´ÅÅÌÉϵȵȡ£Í¨³£Çé¿öÏ£¬ÎÒÃÇ»á°ÑÄÇЩÐèÒªÐòÁл¯µÄÀàʵÏÖSerializable½Ó¿Ú(ÈçÏÂͼËùʾ)£¬µ«ÊÇÕâÖÖ´«Í³µÄ×ö·¨Ð§Âʲ»¸ß£¬ÊµÊ©µÄ¹ý³Ì»áÏûºÄ¸ü¶àµÄÄÚ´æ¡£

µ«ÊÇÎÒÃÇÈç¹ûʹÓÃGSON¿âÀ´´¦ÀíÕâ¸öÐòÁл¯µÄÎÊÌ⣬²»½ö½öÖ´ÐÐËٶȸü¿ì£¬ÄÚ´æµÄʹÓÃЧÂÊÒ²¸ü¸ß¡£AndroidµÄXML²¼¾ÖÎļþ»áÔÚ±àÒëµÄ½×¶Î±»×ª»»³É¸ü¼Ó¸´Ôӵĸñʽ£¬¾ß±¸¸ü¼Ó¸ßЧµÄÖ´ÐÐÐÔÄÜÓë¸ü¸ßµÄÄÚ´æÊ¹ÓÃЧÂÊ¡£

ÏÂÃæ½éÉÜÈý¸öÊý¾ÝÐòÁл¯µÄºòÑ¡·½°¸£º
- Protocal Buffers£ºÇ¿´ó£¬Áé»î£¬µ«ÊǶÔÄÚ´æµÄÏûºÄ»á±È½Ï´ó£¬²¢²»ÊÇÒÆ¶¯ÖÕ¶ËÉϵÄ×î¼ÑÑ¡Ôñ¡£
- Nano-Proto-Buffers£º»ùÓÚProtocal£¬ÎªÒƶ¯ÖÕ¶Ë×öÁËÌØÊâµÄÓÅ»¯£¬´úÂëÖ´ÐÐЧÂʸü¸ß£¬ÄÚ´æÊ¹ÓÃЧÂʸü¼Ñ¡£
- FlatBuffers£ºÕâ¸ö¿ªÔ´¿â×ʼÊÇÓÉGoogleÑз¢µÄ£¬×¨×¢ÓÚÌṩ¸üÓÅÐãµÄÐÔÄÜ¡£
ÉÏÃæÕâЩ·½°¸ÔÚÐÔÄÜ·½ÃæµÄÊý¾Ý¶Ô±ÈÈçÏÂͼËùʾ£º


ΪÁ˱ÜÃâÐòÁл¯´øÀ´µÄÐÔÄÜÎÊÌ⣬ÎÒÃÇÆäʵ¿ÉÒÔ¿¼ÂÇʹÓÃSharedPreference»òÕßSQLiteÀ´´æ´¢ÄÇЩÊý¾Ý£¬±ÜÃâÐèÒªÏȰÑÄÇЩ¸´ÔÓµÄÊý¾Ý½øÐÐÐòÁл¯µÄ²Ù×÷¡£
15) Smaller Serialized Data
Êý¾Ý³ÊÏÖµÄ˳ÐòÒÔ¼°½á¹¹»á¶ÔÐòÁл¯Ö®ºóµÄ¿Õ¼ä²úÉú²»Ð¡µÄÓ°Ï졣ͨ³£À´Ëµ£¬Ò»°ãµÄÊý¾ÝÐòÁл¯µÄ¹ý³ÌÈçÏÂͼËùʾ£º

ÉÏÃæµÄ¹ý³Ì£¬´æÔÚÁ½¸ö±×¶Ë£¬µÚÒ»¸öÊÇÖØ¸´µÄÊôÐÔÃû³Æ£º

ÁíÍâÒ»¸öÊÇGZIPûÓа취¶ÔÉÏÃæµÄÊý¾Ý½øÐиü¼ÓÓÐЧµÄѹËõ£¬¼ÙÈçÏàËÆÊý¾Ý¼ä¸ôÁË32kµÄÊý¾ÝÁ¿£¬ÕâÑùGZIP¾ÍÎÞ·¨½øÐиü¼ÓÓÐЧµÄѹËõ£º

µ«ÊÇÎÒÃÇÉÔ΢¸Ä±äÏÂÊý¾ÝµÄ¼Ç¼·½Ê½£¬¾Í¿ÉÒԵõ½Õ¼Óÿռä¸üСµÄÊý¾Ý£¬ÈçÏÂͼËùʾ£º

ͨ¹ýÓÅ»¯£¬ÖÁÉÙÓÐÈý·½ÃæµÄÐÔÄÜÌáÉý£¬ÈçÏÂͼËùʾ£º
1£©¼õÉÙÁËÖØ¸´µÄÊôÐÔÃû£º

2£©Ê¹µÃGZIPµÄѹËõЧÂʸü¸ß£º

3£©Í¬ÑùµÄÊý¾ÝÀàÐÍ¿ÉÒÔÅúÁ¿ÓÅ»¯£º

16) Caching UI data
Èç½ñ¾ø´ó¶àÊýµÄÓ¦ÓýçÃæÉϳÊÏÖµÄÊý¾Ý¶¼ÒÀÀµÓÚÍøÂçÇëÇ󷵻صĽá¹û£¬ÈçºÎ×öµ½ÔÚÍøÂçÊý¾Ý·µ»ØÖ®Ç°±ÜÃâ³ÊÏÖÒ»¸ö¿Õ°×µÄµÈ´ýÒ³ÃæÄØ£¨µ±È»ÕâÀï˵µÄÊÇ·ÇÊ×´ÎÀäÆô¶¯µÄÇé¿ö£©£¿Õâ¾Í»áÉæ¼°µ½ÈçºÎ»º´æUI½çÃæÉϵÄÊý¾Ý¡£
»º´æUI½çÃæÉϵÄÊý¾Ý£¬¿ÉÒÔ²ÉÓ÷½°¸Óд洢µ½Îļþϵͳ£¬Preference£¬SQLiteµÈµÈ£¬×öÁË»º´æÖ®ºó£¬ÕâÑù¾Í¿ÉÒÔÔÚÇëÇóÊý¾Ý·µ»Ø½á¹û֮ǰ£¬³ÊÏÖ¸øÓû§¾ÉµÄÊý¾Ý£¬¶ø²»ÊÇʹÓÃÕýÔÚ¼ÓÔØµÄ·½Ê½ÈÃÓû§Ê²Ã´Êý¾Ý¶¼¿´²»µ½£¬µ±È»ÔÚÇëÇóÍøÂç×îÐÂÊý¾ÝµÄ¹ý³ÌÖУ¬ÐèÒªÓÐÕýÔÚˢеÄÌáʾ¡£ÖÁÓÚµ½µ×Ñ¡ÔñÄĸö·½°¸À´¶ÔÊý¾Ý½øÐлº´æ£¬¾ÍÐèÒª¸ù¾Ý¾ßÌåÇé¿öÀ´×öÑ¡ÔñÁË¡£
17) CPU Frequency Scaling
µ÷½ÚCPUµÄƵÂÊ»áÖ´ÐеÄÐÔÄܲúÉú½Ï´óµÄÓ°Ï죬ΪÁË×î´ó»¯µÄÑÓ³¤É豸µÄÐøº½Ê±¼ä£¬ÏµÍ³»á¶¯Ì¬µ÷ÕûCPUµÄƵÂÊ£¬ÆµÂÊÔ½¸ßÖ´ÐдúÂëµÄËÙ¶È×ÔÈ»¾ÍÔ½¿ì¡£

Androidϵͳ»áÔÚµçÁ¿ÏûºÄÓë±íÏÖÐÔÄÜÖ®¼ä²»¶ÏµÄ×öȨºâ£¬µ±ÓÐÐèÒªµÄʱºò»áѸËÙµ÷ÕûCPUµÄƵÂʵ½Ò»¸ö±È½Ï¸ß¸ººÉµÄ״̬£¬µ±³ÌÐò²»ÐèÒª¸ßÐÔÄܵÄʱºò¾Í»á½µµÍƵÂÊÀ´È·±£¸ü³¤µÄÐøº½Ê±¼ä¡£

Androidϵͳ¼ì²âµ½ÐèÒªµ÷ÕûCPUµÄƵÂʵ½CPUƵÂÊÕæµÄ´ïµ½¶ÔӦƵÂÊ»áÐèÒª»¨·Ñ´ó¸Å20msµÄʱ¼ä£¬ÔÚ´ËÆÚ¼äºÜÓпÉÄÜ»áÒòΪCPUƵÂʲ»¹»¶øµ¼Ö´úÂëÖ´ÐÐÆ«Âý¡£

ÎÒÃÇ¿ÉÒÔʹÓÃSystrace¹¤¾ßÀ´µ¼³öCPUµÄÖ´ÐÐÇé¿ö£¬ÒÔ±ã°ïÖú¶¨Î»ÐÔÄÜÎÊÌâ¡£
|