ÐÂÄêÒÁʼ£¬Google·¢²¼Á˰üº¬16¸ö¶ÌÊÓÆµµÄAndroidÐÔÄÜÓÅ»¯µä·¶×¨Ì⣬Ïê½âAndroidϵͳÖÐÓйØÐÔÄÜÎÊÌâµÄµ×²ã¹¤×÷ÔÀí£¬²¢½éÉÜÁËÈçºÎͨ¹ý¹¤¾ßÕÒ³öÐÔÄÜÎÊÌâÒÔ¼°ÌáÉýÐÔÄܵĽ¨Òé¡£±¾ÎÄ×÷Õß¶ÔÕâЩÎÊÌâºÍ½¨Òé½øÐÐÁË×ܽáÊáÀí¡£
2015ÄêÒÁʼ£¬Google·¢²¼Á˹ØÓÚAndroidÐÔÄÜÓÅ»¯µä·¶µÄרÌ⣬һ¹²16¸ö¶ÌÊÓÆµ£¬Ã¿¸ö3-5·ÖÖÓ£¬°ïÖú¿ª·¢Õß´´½¨¸ü¿ì¸üÓÅÐãµÄAndroid App¡£¿Î³ÌרÌâ²»½ö½ö½éÉÜÁËAndroidϵͳÖÐÓйØÐÔÄÜÎÊÌâµÄµ×²ã¹¤×÷ÔÀí£¬Í¬Ê±Ò²½éÉÜÁËÈçºÎͨ¹ý¹¤¾ßÀ´ÕÒ³öÐÔÄÜÎÊÌâÒÔ¼°ÌáÉýÐÔÄܵĽ¨Òé¡£Ö÷Òª´ÓÈý¸ö·½ÃæÕ¹¿ª£¬AndroidµÄäÖȾ»úÖÆ£¬ÄÚ´æÓëGC£¬µçÁ¿ÓÅ»¯¡£ÏÂÃæÊǶÔÕâЩÎÊÌâºÍ½¨ÒéµÄ×ܽáÊáÀí¡£

1) Render Performance
´ó¶àÊýÓû§¸ÐÖªµ½µÄ¿¨¶ÙµÈÐÔÄÜÎÊÌâµÄ×îÖ÷Òª¸ùÔ´¶¼ÊÇÒòΪäÖȾÐÔÄÜ¡£´ÓÉè¼ÆÊ¦µÄ½Ç¶È£¬ËûÃÇÏ£ÍûAppÄܹ»Óиü¶àµÄ¶¯»£¬Í¼Æ¬µÈʱÉÐÔªËØÀ´ÊµÏÖÁ÷³©µÄÓû§ÌåÑé¡£µ«ÊÇAndroidϵͳºÜÓпÉÄÜÎÞ·¨¼°Ê±Íê³ÉÄÇЩ¸´ÔӵĽçÃæäÖȾ²Ù×÷¡£Androidϵͳÿ¸ô16ms·¢³öVSYNCÐźţ¬´¥·¢¶ÔUI½øÐÐäÖȾ£¬Èç¹ûÿ´ÎäÖȾ¶¼³É¹¦£¬ÕâÑù¾ÍÄܹ»´ïµ½Á÷³©µÄ»ÃæËùÐèÒªµÄ60fps£¬ÎªÁËÄܹ»ÊµÏÖ60fps£¬ÕâÒâζ×ųÌÐòµÄ´ó¶àÊý²Ù×÷¶¼±ØÐëÔÚ16msÄÚÍê³É¡£

Èç¹ûÄãµÄij¸ö²Ù×÷»¨·Ñʱ¼äÊÇ24ms£¬ÏµÍ³Ôڵõ½VSYNCÐźŵÄʱºò¾ÍÎÞ·¨½øÐÐÕý³£äÖȾ£¬ÕâÑù¾Í·¢ÉúÁ˶ªÖ¡ÏÖÏó¡£ÄÇôÓû§ÔÚ32msÄÚ¿´µ½µÄ»áÊÇͬһ֡»Ãæ¡£

Óû§ÈÝÒ×ÔÚUIÖ´Ðж¯»»òÕß»¬¶¯ListViewµÄʱºò¸ÐÖªµ½¿¨¶Ù²»Á÷³©£¬ÊÇÒòΪÕâÀïµÄ²Ù×÷Ïà¶Ô¸´ÔÓ£¬ÈÝÒ×·¢Éú¶ªÖ¡µÄÏÖÏ󣬴Ӷø¸Ð¾õ¿¨¶Ù¡£ÓкܶàÔÒò¿ÉÒÔµ¼Ö¶ªÖ¡£¬Ò²ÐíÊÇÒòΪÄãµÄlayoutÌ«¹ý¸´ÔÓ£¬ÎÞ·¨ÔÚ16msÄÚÍê³ÉäÖȾ£¬ÓпÉÄÜÊÇÒòΪÄãµÄUIÉÏÓвãµþÌ«¶àµÄ»æÖƵ¥Ôª£¬»¹ÓпÉÄÜÊÇÒòΪ¶¯»Ö´ÐеĴÎÊý¹ý¶à¡£ÕâЩ¶¼»áµ¼ÖÂCPU»òÕßGPU¸ºÔعýÖØ¡£
ÎÒÃÇ¿ÉÒÔͨ¹ýһЩ¹¤¾ßÀ´¶¨Î»ÎÊÌ⣬±ÈÈç¿ÉÒÔʹÓÃHierarchyViewerÀ´²éÕÒActivityÖеIJ¼¾ÖÊÇ·ñ¹ýÓÚ¸´ÔÓ£¬Ò²¿ÉÒÔʹÓÃÊÖ»úÉèÖÃÀïÃæµÄ¿ª·¢ÕßÑ¡Ï´ò¿ªShow GPU OverdrawµÈÑ¡Ïî½øÐй۲졣Ä㻹¿ÉÒÔʹÓÃTraceViewÀ´¹Û²ìCPUµÄÖ´ÐÐÇé¿ö£¬¸ü¼Ó¿ì½ÝµÄÕÒµ½ÐÔÄÜÆ¿¾±¡£
2) Understanding Overdraw
Overdraw(¹ý¶È»æÖÆ)ÃèÊöµÄÊÇÆÁÄ»ÉϵÄij¸öÏñËØÔÚͬһ֡µÄʱ¼äÄÚ±»»æÖÆÁ˶à´Î¡£ÔÚ¶à²ã´ÎµÄUI½á¹¹ÀïÃæ£¬Èç¹û²»¿É¼ûµÄUIÒ²ÔÚ×ö»æÖƵIJÙ×÷£¬Õâ¾Í»áµ¼ÖÂijЩÏñËØÇøÓò±»»æÖÆÁ˶à´Î¡£Õâ¾ÍÀË·Ñ´óÁ¿µÄCPUÒÔ¼°GPU×ÊÔ´¡£

µ±Éè¼ÆÉÏ×·Çó¸ü»ªÀöµÄÊÓ¾õЧ¹ûµÄʱºò£¬ÎÒÃǾÍÈÝÒ×ÏÝÈë²ÉÓÃÔ½À´Ô½¶àµÄ²ãµþ×é¼þÀ´ÊµÏÖÕâÖÖÊÓ¾õЧ¹ûµÄ¹ÖȦ¡£ÕâºÜÈÝÒ×µ¼Ö´óÁ¿µÄÐÔÄÜÎÊÌ⣬ΪÁË»ñµÃ×î¼ÑµÄÐÔÄÜ£¬ÎÒÃDZØÐ뾡Á¿¼õÉÙOverdrawµÄÇé¿ö·¢Éú¡£
ÐÒÔ˵ÄÊÇ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÊÖ»úÉèÖÃÀïÃæµÄ¿ª·¢ÕßÑ¡Ï´ò¿ªShow GPU OverdrawµÄÑ¡Ï¿ÉÒÔ¹Û²ìUIÉϵÄOverdrawÇé¿ö¡£

À¶É«£¬µÂÌ£¬µºì£¬Éîºì´ú±íÁË4ÖÖ²»Í¬³Ì¶ÈµÄOverdrawÇé¿ö£¬ÎÒÃǵÄÄ¿±ê¾ÍÊǾ¡Á¿¼õÉÙºìÉ«Overdraw£¬¿´µ½¸ü¶àµÄÀ¶É«ÇøÓò¡£
OverdrawÓÐʱºòÊÇÒòΪÄãµÄUI²¼¾Ö´æÔÚ´óÁ¿ÖصþµÄ²¿·Ö£¬»¹ÓеÄʱºòÊÇÒòΪ·Ç±ØÐëµÄÖØµþ±³¾°¡£ÀýÈçij¸öActivityÓÐÒ»¸ö±³¾°£¬È»ºóÀïÃæµÄLayoutÓÖÓÐ×Ô¼ºµÄ±³¾°£¬Í¬Ê±×ÓViewÓÖ·Ö±ðÓÐ×Ô¼ºµÄ±³¾°¡£½ö½öÊÇͨ¹ýÒÆ³ý·Ç±ØÐëµÄ±³¾°Í¼Æ¬£¬Õâ¾ÍÄܹ»¼õÉÙ´óÁ¿µÄºìÉ«OverdrawÇøÓò£¬Ôö¼ÓÀ¶É«ÇøÓòµÄÕ¼±È¡£ÕâÒ»´ëÊ©Äܹ»ÏÔÖøÌáÉý³ÌÐòÐÔÄÜ¡£
3) Understanding VSYNC
ΪÁËÀí½âAppÊÇÈçºÎ½øÐÐäÖȾµÄ£¬ÎÒÃDZØÐëÁ˽âÊÖ»úÓ²¼þÊÇÈçºÎ¹¤×÷£¬ÄÇô¾Í±ØÐëÀí½âʲôÊÇVSYNC¡£
ÔÚ½²½âVSYNC֮ǰ£¬ÎÒÃÇÐèÒªÁ˽âÁ½¸öÏà¹ØµÄ¸ÅÄ
- Refresh Rate£º´ú±íÁËÆÁÄ»ÔÚÒ»ÃëÄÚË¢ÐÂÆÁÄ»µÄ´ÎÊý£¬ÕâÈ¡¾öÓÚÓ²¼þµÄ¹Ì¶¨²ÎÊý£¬ÀýÈç60Hz¡£
- Frame Rate£º´ú±íÁËGPUÔÚÒ»ÃëÄÚ»æÖƲÙ×÷µÄÖ¡Êý£¬ÀýÈç30fps£¬60fps¡£
GPU»á»ñȡͼÐÎÊý¾Ý½øÐÐäÖȾ£¬È»ºóÓ²¼þ¸ºÔð°ÑäÖȾºóµÄÄÚÈݳÊÏÖµ½ÆÁÄ»ÉÏ£¬ËûÃÇÁ½Õß²»Í£µÄ½øÐÐÐ×÷¡£

²»ÐÒµÄÊÇ£¬Ë¢ÐÂÆµÂʺÍÖ¡Âʲ¢²»ÊÇ×ÜÄܹ»±£³ÖÏàͬµÄ½Ú×à¡£Èç¹û·¢ÉúÖ¡ÂÊÓëË¢ÐÂÆµÂʲ»Ò»ÖµÄÇé¿ö£¬¾Í»áÈÝÒ׳öÏÖTearingµÄÏÖÏó(»ÃæÉÏÏÂÁ½²¿·ÖÏÔʾÄÚÈÝ·¢Éú¶ÏÁÑ£¬À´×Ô²»Í¬µÄÁ½Ö¡Êý¾Ý·¢ÉúÖØµþ)¡£

Àí½âͼÏñäÖȾÀïÃæµÄË«ÖØÓëÈýÖØ»º´æ»úÖÆ£¬Õâ¸ö¸ÅÄî±È½Ï¸´ÔÓ£¬ÇëÒÆ²½²é¿´GraphicsÒÔ¼°¡¶Á˽âAndroid 4.1Ö®Èý£º»ÆÓÍÏîÄ¿ —— ÔË×÷»úÀí¼°ÐÂÏÊÍæÒâ¡·¡£

ͨ³£À´Ëµ£¬Ö¡Âʳ¬¹ýË¢ÐÂÆµÂÊÖ»ÊÇÒ»ÖÖÀíÏëµÄ×´¿ö£¬ÔÚ³¬¹ý60fpsµÄÇé¿öÏ£¬GPUËù²úÉúµÄÖ¡Êý¾Ý»áÒòΪµÈ´ýVSYNCµÄË¢ÐÂÐÅÏ¢¶ø±»Holdס£¬ÕâÑùÄܹ»±£³Öÿ´Îˢж¼ÓÐʵ¼ÊµÄеÄÊý¾Ý¿ÉÒÔÏÔʾ¡£µ«ÊÇÎÒÃÇÓöµ½¸ü¶àµÄÇé¿öÊÇÖ¡ÂÊСÓÚË¢ÐÂÆµÂÊ¡£

ÔÚÕâÖÖÇé¿öÏ£¬Ä³Ð©Ö¡ÏÔʾµÄ»ÃæÄÚÈݾͻáÓëÉÏÒ»Ö¡µÄ»ÃæÏàͬ¡£Ôã¸âµÄÊÂÇéÊÇ£¬Ö¡ÂÊ´Ó³¬¹ý60fpsͻȻµôµ½60fpsÒÔÏ£¬ÕâÑù¾Í»á·¢ÉúLAG£¬JANK£¬HITCHINGµÈ¿¨¶ÙµôÖ¡µÄ²»Ë³»¬µÄÇé¿ö¡£ÕâÒ²ÊÇÓû§¸ÐÊܲ»ºÃµÄÔÒòËùÔÚ¡£
4) Tool:Profile GPU Rendering
ÐÔÄÜÎÊÌâÈç´ËµÄÂé·³£¬ÐÒºÃÎÒÃÇ¿ÉÒÔÓй¤¾ßÀ´½øÐе÷ÊÔ¡£´ò¿ªÊÖ»úÀïÃæµÄ¿ª·¢ÕßÑ¡ÏѡÔñProfile GPU Rendering£¬Ñ¡ÖÐOn screen as barsµÄÑ¡Ïî¡£

Ñ¡ÔñÁËÕâÑùÒÔºó£¬ÎÒÃÇ¿ÉÒÔÔÚÊÖ»ú»ÃæÉÏ¿´µ½·á¸»µÄGPU»æÖÆÍ¼ÐÎÐÅÏ¢£¬·Ö±ð¹ØÓÚStatusBar£¬NavBar£¬¼¤»îµÄ³ÌÐòActivityÇøÓòµÄGPU RendingÐÅÏ¢¡£

Ëæ×ŽçÃæµÄˢУ¬½çÃæÉÏ»á¹ö¶¯ÏÔʾ´¹Ö±µÄÖù״ͼÀ´±íʾÿ֡»ÃæËùÐèÒªäÖȾµÄʱ¼ä£¬Öù״ͼԽ¸ß±íʾ»¨·ÑµÄäÖȾʱ¼äÔ½³¤¡£

ÖмäÓÐÒ»¸ùÂÌÉ«µÄºáÏߣ¬´ú±í16ms£¬ÎÒÃÇÐèҪȷ±£Ã¿Ò»Ö¡»¨·ÑµÄ×Üʱ¼ä¶¼µÍÓÚÕâÌõºáÏߣ¬ÕâÑù²ÅÄܹ»±ÜÃâ³öÏÖ¿¨¶ÙµÄÎÊÌâ¡£

ÿһÌõÖù×´Ïß¶¼°üº¬Èý²¿·Ö£¬À¶É«´ú±í²âÁ¿»æÖÆDisplay ListµÄʱ¼ä£¬ºìÉ«´ú±íOpenGLäÖȾDisplay ListËùÐèÒªµÄʱ¼ä£¬»ÆÉ«´ú±íCPUµÈ´ýGPU´¦ÀíµÄʱ¼ä¡£
5) Why 60fps?
ÎÒÃÇͨ³£¶¼»áÌáµ½60fpsÓë16ms£¬¿ÉÊÇÖªµÀΪºÎ»áÊÇÒÔ³ÌÐòÊÇ·ñ´ïµ½60fpsÀ´×÷ΪAppÐÔÄܵĺâÁ¿±ê×¼Âð£¿ÕâÊÇÒòΪÈËÑÛÓë´óÄÔÖ®¼äµÄÐ×÷ÎÞ·¨¸ÐÖª³¬¹ý60fpsµÄ»Ãæ¸üС£
12fps´ó¸ÅÀàËÆÊÖ¶¯¿ìËÙ·¶¯Êé¼®µÄÖ¡ÂÊ£¬ÕâÃ÷ÏÔÊÇ¿ÉÒÔ¸ÐÖªµ½²»¹»Ë³»¬µÄ¡£24fpsʹµÃÈËÑÛ¸ÐÖªµÄÊÇÁ¬ÐøÏßÐÔµÄÔ˶¯£¬ÕâÆäʵÊǹ鹦ÓÚÔ˶¯Ä£ºýµÄЧ¹û¡£24fpsÊǵçÓ°½ºÈ¦Í¨³£Ê¹ÓõÄÖ¡ÂÊ£¬ÒòΪÕâ¸öÖ¡ÂÊÒѾ×ã¹»Ö§³Å´ó²¿·ÖµçÓ°»ÃæÐèÒª±í´ïµÄÄÚÈÝ£¬Í¬Ê±Äܹ»×î´óµÄ¼õÉÙ·ÑÓÃÖ§³ö¡£µ«ÊǵÍÓÚ30fpsÊÇÎÞ·¨Ë³³©±íÏÖѤÀöµÄ»ÃæÄÚÈݵ쬴Ëʱ¾ÍÐèÒªÓõ½60fpsÀ´´ïµ½ÏëÒªµÄЧ¹û£¬µ±È»³¬¹ý60fpsÊÇûÓбØÒªµÄ¡£
¿ª·¢appµÄÐÔÄÜÄ¿±ê¾ÍÊDZ£³Ö60fps£¬ÕâÒâζ×Åÿһ֡ÄãÖ»ÓÐ16ms=1000/60µÄʱ¼äÀ´´¦ÀíËùÓеÄÈÎÎñ¡£
6) Android, UI and the GPU
Á˽âAndroidÊÇÈçºÎÀûÓÃGPU½øÐÐ»ÃæäÖȾÓÐÖúÓÚÎÒÃǸüºÃµÄÀí½âÐÔÄÜÎÊÌâ¡£ÄÇôһ¸ö×îʵ¼ÊµÄÎÊÌâÊÇ£ºactivityµÄ»ÃæÊÇÈçºÎ»æÖƵ½ÆÁÄ»Éϵģ¿ÄÇЩ¸´ÔÓµÄXML²¼¾ÖÎļþÓÖÊÇÈçºÎÄܹ»±»Ê¶±ð²¢»æÖƳöÀ´µÄ£¿

ResterizationÕ¤¸ñ»¯ÊÇ»æÖÆÄÇЩButton£¬Shape£¬Path£¬String£¬BitmapµÈ×é¼þ×î»ù´¡µÄ²Ù×÷¡£Ëü°ÑÄÇЩ×é¼þ²ð·Öµ½²»Í¬µÄÏñËØÉϽøÐÐÏÔʾ¡£ÕâÊÇÒ»¸öºÜ·ÑʱµÄ²Ù×÷£¬GPUµÄÒýÈë¾ÍÊÇΪÁ˼ӿìÕ¤¸ñ»¯µÄ²Ù×÷¡£
CPU¸ºÔð°ÑUI×é¼þ¼ÆËã³ÉPolygons£¬TextureÎÆÀí£¬È»ºó½»¸øGPU½øÐÐÕ¤¸ñ»¯äÖȾ¡£

È»¶øÃ¿´Î´ÓCPU×ªÒÆµ½GPUÊÇÒ»¼þºÜÂé·³µÄÊÂÇ飬ËùÐÒµÄÊÇOpenGL ES¿ÉÒÔ°ÑÄÇЩÐèÒªäÖȾµÄÎÆÀíHoldÔÚGPU MemoryÀïÃæ£¬ÔÚÏ´ÎÐèÒªäÖȾµÄʱºòÖ±½Ó½øÐвÙ×÷¡£ËùÒÔÈç¹ûÄã¸üÐÂÁËGPUËùholdסµÄÎÆÀíÄÚÈÝ£¬ÄÇô֮ǰ±£´æµÄ״̬¾Í¶ªÊ§ÁË¡£
ÔÚAndroidÀïÃæÄÇЩÓÉÖ÷ÌâËùÌṩµÄ×ÊÔ´£¬ÀýÈçBitmaps£¬Drawables¶¼ÊÇÒ»Æð´ò°üµ½Í³Ò»µÄTextureÎÆÀíµ±ÖУ¬È»ºóÔÙ´«µÝµ½GPUÀïÃæ£¬ÕâÒâζ×Åÿ´ÎÄãÐèҪʹÓÃÕâЩ×ÊÔ´µÄʱºò£¬¶¼ÊÇÖ±½Ó´ÓÎÆÀíÀïÃæ½øÐлñÈ¡äÖȾµÄ¡£µ±È»Ëæ×ÅUI×é¼þµÄÔ½À´Ô½·á¸»£¬ÓÐÁ˸ü¶àÑݱäµÄÐÎ̬¡£ÀýÈçÏÔʾͼƬµÄʱºò£¬ÐèÒªÏȾ¹ýCPUµÄ¼ÆËã¼ÓÔØµ½ÄÚ´æÖУ¬È»ºó´«µÝ¸øGPU½øÐÐäÖȾ¡£ÎÄ×ÖµÄÏÔʾ¸ü¼Ó¸´ÔÓ£¬ÐèÒªÏȾ¹ýCPU»»Ëã³ÉÎÆÀí£¬È»ºóÔÙ½»¸øGPU½øÐÐäÖȾ£¬»Øµ½CPU»æÖƵ¥¸ö×Ö·ûµÄʱºò£¬ÔÙÖØÐÂÒýÓþ¹ýGPUäÖȾµÄÄÚÈÝ¡£¶¯»ÔòÊÇÒ»¸ö¸ü¼Ó¸´ÔӵIJÙ×÷Á÷³Ì¡£
ΪÁËÄܹ»Ê¹µÃAppÁ÷³©£¬ÎÒÃÇÐèÒªÔÚÿһ֡16msÒÔÄÚ´¦ÀíÍêËùÓеÄCPUÓëGPU¼ÆË㣬»æÖÆ£¬äÖȾµÈµÈ²Ù×÷¡£
7) Invalidations, Layouts, and Performance
˳»¬¾«ÃîµÄ¶¯»ÊÇappÉè¼ÆÀïÃæ×îÖØÒªµÄÔªËØÖ®Ò»£¬ÕâЩ¶¯»Äܹ»ÏÔÖøÌáÉýÓû§ÌåÑé¡£ÏÂÃæ»á½²½âAndroidϵͳÊÇÈçºÎ´¦ÀíUI×é¼þµÄ¸üвÙ×÷µÄ¡£
ͨ³£À´Ëµ£¬AndroidÐèÒª°ÑXML²¼¾ÖÎļþת»»³ÉGPUÄܹ»Ê¶±ð²¢»æÖƵĶÔÏó¡£Õâ¸ö²Ù×÷ÊÇÔÚDisplayListµÄ°ïÖúÏÂÍê³ÉµÄ¡£DisplayList³ÖÓÐËùÓн«Òª½»¸øGPU»æÖƵ½ÆÁÄ»ÉϵÄÊý¾ÝÐÅÏ¢¡£
ÔÚij¸öViewµÚÒ»´ÎÐèÒª±»äÖȾʱ£¬DisplayList»áÒò´Ë¶ø±»´´½¨£¬µ±Õâ¸öViewÒªÏÔʾµ½ÆÁÄ»ÉÏʱ£¬ÎÒÃÇ»áÖ´ÐÐGPUµÄ»æÖÆÖ¸ÁîÀ´½øÐÐäÖȾ¡£Èç¹ûÄãÔÚºóÐøÓÐÖ´ÐÐÀàËÆÒÆ¶¯Õâ¸öViewµÄλÖõȲÙ×÷¶øÐèÒªÔÙ´ÎäÖȾÕâ¸öViewʱ£¬ÎÒÃǾͽö½öÐèÒª¶îÍâ²Ù×÷Ò»´ÎäÖȾָÁî¾Í¹»ÁË¡£È»¶øÈç¹ûÄãÐÞ¸ÄÁËViewÖеÄijЩ¿É¼û×é¼þ£¬ÄÇô֮ǰµÄDisplayList¾ÍÎÞ·¨¼ÌÐøÊ¹ÓÃÁË£¬ÎÒÃÇÐèÒª»ØÍ·ÖØÐ´´½¨Ò»¸öDisplayList²¢ÇÒÖØÐÂÖ´ÐÐäÖȾָÁî²¢¸üе½ÆÁÄ»ÉÏ¡£
ÐèҪעÒâµÄÊÇ£ºÈκÎʱºòViewÖеĻæÖÆÄÚÈÝ·¢Éú±ä»¯Ê±£¬¶¼»áÖØÐÂÖ´Ðд´½¨DisplayList£¬äÖȾDisplayList£¬¸üе½ÆÁÄ»ÉϵÈһϵÁвÙ×÷¡£Õâ¸öÁ÷³ÌµÄ±íÏÖÐÔÄÜÈ¡¾öÓÚÄãµÄViewµÄ¸´Ôӳ̶ȣ¬ViewµÄ״̬±ä»¯ÒÔ¼°äÖȾ¹ÜµÀµÄÖ´ÐÐÐÔÄÜ¡£¾Ù¸öÀý×Ó£¬¼ÙÉèij¸öButtonµÄ´óСÐèÒªÔö´óµ½Ä¿Ç°µÄÁ½±¶£¬ÔÚÔö´óButton´óС֮ǰ£¬ÐèҪͨ¹ý¸¸ViewÖØÐ¼ÆËã²¢°Ú·ÅÆäËû×ÓViewµÄλÖá£ÐÞ¸ÄViewµÄ´óС»á´¥·¢Õû¸öHierarcyViewµÄÖØÐ¼ÆËã´óСµÄ²Ù×÷¡£Èç¹ûÊÇÐÞ¸ÄViewµÄλÖÃÔò»á´¥·¢HierarchViewÖØÐ¼ÆËãÆäËûViewµÄλÖá£Èç¹û²¼¾ÖºÜ¸´ÔÓ£¬Õâ¾Í»áºÜÈÝÒ×µ¼ÖÂÑÏÖØµÄÐÔÄÜÎÊÌâ¡£ÎÒÃÇÐèÒª¾¡Á¿¼õÉÙOverdraw¡£

ÎÒÃÇ¿ÉÒÔͨ¹ýÇ°Ãæ½éÉܵÄMonitor GPU RenderingÀ´²é¿´äÖȾµÄ±íÏÖÐÔÄÜÈçºÎ£¬ÁíÍâÒ²¿ÉÒÔͨ¹ý¿ª·¢ÕßÑ¡ÏîÀïÃæµÄShow GPU view updatesÀ´²é¿´ÊÓͼ¸üеIJÙ×÷£¬×îºóÎÒÃÇ»¹¿ÉÒÔͨ¹ýHierarchyViewerÕâ¸ö¹¤¾ßÀ´²é¿´²¼¾Ö£¬Ê¹µÃ²¼¾Ö¾¡Á¿±âƽ»¯£¬ÒƳý·Ç±ØÐèµÄUI×é¼þ£¬ÕâЩ²Ù×÷Äܹ»¼õÉÙMeasure£¬LayoutµÄ¼ÆËãʱ¼ä¡£
8) Overdraw, Cliprect, QuickReject
ÒýÆðÐÔÄÜÎÊÌâµÄÒ»¸öºÜÖØÒªµÄ·½ÃæÊÇÒòΪ¹ý¶à¸´ÔӵĻæÖƲÙ×÷¡£ÎÒÃÇ¿ÉÒÔͨ¹ý¹¤¾ßÀ´¼ì²â²¢ÐÞ¸´±ê×¼UI×é¼þµÄOverdrawÎÊÌ⣬µ«ÊÇÕë¶Ô¸ß¶È×Ô¶¨ÒåµÄUI×é¼þÔòÏÔµÃÓÐЩÁ¦²»´ÓÐÄ¡£
ÓÐÒ»¸öÇÏÃÅÊÇÎÒÃÇ¿ÉÒÔͨ¹ýÖ´Ðм¸¸öAPIs·½·¨À´ÏÔÖøÌáÉý»æÖƲÙ×÷µÄÐÔÄÜ¡£Ç°ÃæÓÐÌáµ½¹ý£¬·Ç¿É¼ûµÄUI×é¼þ½øÐлæÖƸüлᵼÖÂOverdraw¡£ÀýÈçNav Drawer´ÓǰÖÿɼûµÄActivity»¬³öÖ®ºó£¬Èç¹û»¹¼ÌÐø»æÖÆÄÇЩÔÚNav DrawerÀïÃæ²»¿É¼ûµÄUI×é¼þ£¬Õâ¾Íµ¼ÖÂÁËOverdraw¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬Androidϵͳ»áͨ¹ý±ÜÃâ»æÖÆÄÇЩÍêÈ«²»¿É¼ûµÄ×é¼þÀ´¾¡Á¿¼õÉÙOverdraw¡£ÄÇЩNav DrawerÀïÃæ²»¿É¼ûµÄView¾Í²»»á±»Ö´ÐÐÀË·Ñ×ÊÔ´¡£

µ«ÊDz»ÐÒµÄÊÇ£¬¶ÔÓÚÄÇЩ¹ýÓÚ¸´ÔÓµÄ×Ô¶¨ÒåµÄView(ÖØÐ´ÁËonDraw·½·¨)£¬AndroidϵͳÎÞ·¨¼ì²â¾ßÌåÔÚonDrawÀïÃæ»áÖ´ÐÐʲô²Ù×÷£¬ÏµÍ³ÎÞ·¨¼à¿Ø²¢×Ô¶¯ÓÅ»¯£¬Ò²¾ÍÎÞ·¨±ÜÃâOverdrawÁË¡£µ«ÊÇÎÒÃÇ¿ÉÒÔͨ¹ýcanvas.clipRect()À´°ïÖúϵͳʶ±ðÄÇЩ¿É¼ûµÄÇøÓò¡£Õâ¸ö·½·¨¿ÉÒÔÖ¸¶¨Ò»¿é¾ØÐÎÇøÓò£¬Ö»ÓÐÔÚÕâ¸öÇøÓòÄڲŻᱻ»æÖÆ£¬ÆäËûµÄÇøÓò»á±»ºöÊÓ¡£Õâ¸öAPI¿ÉÒԺܺõİïÖúÄÇЩÓжà×éÖØµþ×é¼þµÄ×Ô¶¨ÒåViewÀ´¿ØÖÆÏÔʾµÄÇøÓò¡£Í¬Ê±clipRect·½·¨»¹¿ÉÒÔ°ïÖú½ÚÔ¼CPUÓëGPU×ÊÔ´£¬ÔÚclipRectÇøÓòÖ®ÍâµÄ»æÖÆÖ¸Áî¶¼²»»á±»Ö´ÐУ¬ÄÇЩ²¿·ÖÄÚÈÝÔÚ¾ØÐÎÇøÓòÄÚµÄ×é¼þ£¬ÈÔÈ»»áµÃµ½»æÖÆ¡£

³ýÁËclipRect·½·¨Ö®Í⣬ÎÒÃÇ»¹¿ÉÒÔʹÓÃcanvas.quickreject()À´ÅжÏÊÇ·ñûºÍij¸ö¾ØÐÎÏཻ£¬´Ó¶øÌø¹ýÄÇЩ·Ç¾ØÐÎÇøÓòÄڵĻæÖƲÙ×÷¡£×öÁËÄÇЩÓÅ»¯Ö®ºó£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÉÏÃæ½éÉܵÄShow GPU OverdrawÀ´²é¿´Ð§¹û¡£
9) Memory Churn and performance
ËäÈ»AndroidÓÐ×Ô¶¯¹ÜÀíÄÚ´æµÄ»úÖÆ£¬µ«ÊǶÔÄÚ´æµÄ²»Ç¡µ±Ê¹ÓÃÈÔÈ»ÈÝÒ×ÒýÆðÑÏÖØµÄÐÔÄÜÎÊÌâ¡£ÔÚͬһ֡ÀïÃæ´´½¨¹ý¶àµÄ¶ÔÏóÊǼþÐèÒªÌØ±ðÒýÆð×¢ÒâµÄÊÂÇé¡£
AndroidϵͳÀïÃæÓÐÒ»¸öGenerational Heap MemoryµÄÄ£ÐÍ£¬ÏµÍ³»á¸ù¾ÝÄÚ´æÖв»Í¬µÄÄÚ´æÊý¾ÝÀàÐÍ·Ö±ðÖ´Ðв»Í¬µÄGC²Ù×÷¡£ÀýÈ磬×î½ü¸Õ·ÖÅäµÄ¶ÔÏó»á·ÅÔÚYoung GenerationÇøÓò£¬Õâ¸öÇøÓòµÄ¶ÔÏóͨ³£¶¼ÊÇ»á¿ìËÙ±»´´½¨²¢ÇҺܿ챻Ïú»Ù»ØÊյģ¬Í¬Ê±Õâ¸öÇøÓòµÄGC²Ù×÷ËÙ¶ÈÒ²ÊDZÈOld GenerationÇøÓòµÄGC²Ù×÷Ëٶȸü¿ìµÄ¡£

³ýÁËËٶȲîÒìÖ®Í⣬ִÐÐGC²Ù×÷µÄʱºò£¬ÈκÎÏ̵߳ÄÈκβÙ×÷¶¼»áÐèÒªÔÝÍ££¬µÈ´ýGC²Ù×÷Íê³ÉÖ®ºó£¬ÆäËû²Ù×÷²ÅÄܹ»¼ÌÐøÔËÐС£

ͨ³£À´Ëµ£¬µ¥¸öµÄGC²¢²»»áÕ¼ÓÃÌ«¶àʱ¼ä£¬µ«ÊÇ´óÁ¿²»Í£µÄGC²Ù×÷Ôò»áÏÔÖøÕ¼ÓÃÖ¡¼ä¸ôʱ¼ä(16ms)¡£Èç¹ûÔÚÖ¡¼ä¸ôʱ¼äÀïÃæ×öÁ˹ý¶àµÄGC²Ù×÷£¬ÄÇô×ÔÈ»ÆäËûÀàËÆ¼ÆË㣬äÖȾµÈ²Ù×÷µÄ¿ÉÓÃʱ¼ä¾Í±äµÃÉÙÁË¡£
µ¼ÖÂGCƵ·±Ö´ÐÐÓÐÁ½¸öÔÒò£º
- Memory ChurnÄÚ´æ¶¶¶¯£¬ÄÚ´æ¶¶¶¯ÊÇÒòΪ´óÁ¿µÄ¶ÔÏó±»´´½¨ÓÖÔÚ¶Ìʱ¼äÄÚÂíÉϱ»ÊÍ·Å¡£
- ˲¼ä²úÉú´óÁ¿µÄ¶ÔÏó»áÑÏÖØÕ¼ÓÃYoung GenerationµÄÄÚ´æÇøÓò£¬µ±´ïµ½·§Öµ£¬Ê£Óà¿Õ¼ä²»¹»µÄʱºò£¬Ò²»á´¥·¢GC¡£¼´Ê¹Ã¿´Î·ÖÅäµÄ¶ÔÏóÕ¼ÓÃÁ˺ÜÉÙµÄÄڴ棬µ«ÊÇËûÃǵþ¼ÓÔÚÒ»Æð»áÔö¼ÓHeapµÄѹÁ¦£¬´Ó¶ø´¥·¢¸ü¶àÆäËûÀàÐ͵ÄGC¡£Õâ¸ö²Ù×÷ÓпÉÄÜ»áÓ°Ïìµ½Ö¡ÂÊ£¬²¢Ê¹µÃÓû§¸ÐÖªµ½ÐÔÄÜÎÊÌâ¡£

½â¾öÉÏÃæµÄÎÊÌâÓмò½àÖ±¹Û·½·¨£¬Èç¹ûÄãÔÚMemory MonitorÀïÃæ²é¿´µ½¶Ìʱ¼ä·¢ÉúÁ˶à´ÎÄÚ´æµÄÕǵø£¬ÕâÒâζןÜÓпÉÄÜ·¢ÉúÁËÄÚ´æ¶¶¶¯¡£

ͬʱÎÒÃÇ»¹¿ÉÒÔͨ¹ýAllocation TrackerÀ´²é¿´ÔÚ¶Ìʱ¼äÄÚ£¬Í¬Ò»¸öÕ»Öв»¶Ï½ø³öµÄÏàͬ¶ÔÏó¡£ÕâÊÇÄÚ´æ¶¶¶¯µÄµäÐÍÐźÅÖ®Ò»¡£
µ±Äã´óÖ¶¨Î»ÎÊÌâÖ®ºó£¬½ÓÏÂÈ¥µÄÎÊÌâÐÞ¸´Ò²¾ÍÏÔµÃÏà¶ÔÖ±½Ó¼òµ¥ÁË¡£ÀýÈ磬ÄãÐèÒª±ÜÃâÔÚforÑ»·ÀïÃæ·ÖÅä¶ÔÏóÕ¼ÓÃÄڴ棬ÐèÒª³¢Ê԰ѶÔÏóµÄ´´½¨ÒƵ½Ñ»·ÌåÖ®Í⣬×Ô¶¨ÒåViewÖеÄonDraw·½·¨Ò²ÐèÒªÒýÆð×¢Ò⣬ÿ´ÎÆÁÄ»·¢Éú»æÖÆÒÔ¼°¶¯»Ö´Ðйý³ÌÖУ¬onDraw·½·¨¶¼»á±»µ÷Óõ½£¬±ÜÃâÔÚonDraw·½·¨ÀïÃæÖ´Ðи´ÔӵIJÙ×÷£¬±ÜÃâ´´½¨¶ÔÏó¡£¶ÔÓÚÄÇЩÎÞ·¨±ÜÃâÐèÒª´´½¨¶ÔÏóµÄÇé¿ö£¬ÎÒÃÇ¿ÉÒÔ¿¼ÂǶÔÏó³ØÄ£ÐÍ£¬Í¨¹ý¶ÔÏó³ØÀ´½â¾öƵ·±´´½¨ÓëÏú»ÙµÄÎÊÌ⣬µ«ÊÇÕâÀïÐèҪעÒâ½áÊøÊ¹ÓÃÖ®ºó£¬ÐèÒªÊÖ¶¯ÊͷŶÔÏó³ØÖеĶÔÏó¡£
10) Garbage Collection in Android
JVMµÄ»ØÊÕ»úÖÆ¸ø¿ª·¢ÈËÔ±´øÀ´ºÜ´óµÄºÃ´¦£¬²»ÓÃʱ¿Ì´¦Àí¶ÔÏóµÄ·ÖÅäÓë»ØÊÕ£¬¿ÉÒÔ¸ü¼ÓרעÓÚ¸ü¼Ó¸ß¼¶µÄ´úÂëʵÏÖ¡£Ïà±ÈÆðJava£¬CÓëC++µÈÓïÑԾ߱¸¸ü¸ßµÄÖ´ÐÐЧÂÊ£¬ËûÃÇÐèÒª¿ª·¢ÈËÔ±×Ô¼º¹Ø×¢¶ÔÏóµÄ·ÖÅäÓë»ØÊÕ£¬µ«ÊÇÔÚÒ»¸öÅÓ´óµÄϵͳµ±ÖУ¬»¹ÊÇÃâ²»Á˾³£·¢Éú²¿·Ö¶ÔÏóÍü¼Ç»ØÊÕµÄÇé¿ö£¬Õâ¾ÍÊÇÄÚ´æÐ¹Â©¡£
ÔʼJVMÖеÄGC»úÖÆÔÚAndroidÖеõ½Á˺ܴó³Ì¶ÈÉϵÄÓÅ»¯¡£AndroidÀïÃæÊÇÒ»¸öÈý¼¶GenerationµÄÄÚ´æÄ£ÐÍ£¬×î½ü·ÖÅäµÄ¶ÔÏó»á´æ·ÅÔÚYoung GenerationÇøÓò£¬µ±Õâ¸ö¶ÔÏóÔÚÕâ¸öÇøÓòÍ£ÁôµÄʱ¼ä´ïµ½Ò»¶¨³Ì¶È£¬Ëü»á±»Òƶ¯µ½Old Generation£¬×îºóµ½Permanent GenerationÇøÓò¡£

ÿһ¸ö¼¶±ðµÄÄÚ´æÇøÓò¶¼Óй̶¨µÄ´óС£¬´Ëºó²»¶ÏÓÐеĶÔÏó±»·ÖÅäµ½´ËÇøÓò£¬µ±ÕâЩ¶ÔÏó×ܵĴóС¿ì´ïµ½ÕâÒ»¼¶±ðÄÚ´æÇøÓòµÄ·§ÖµÊ±£¬»á´¥·¢GCµÄ²Ù×÷£¬ÒÔ±ãÌÚ³ö¿Õ¼äÀ´´æ·ÅÆäËûеĶÔÏó¡£

Ç°ÃæÌáµ½¹ýÿ´ÎGC·¢ÉúµÄʱºò£¬ËùÓеÄÏ̶߳¼ÊÇÔÝͣ״̬µÄ¡£GCËùÕ¼ÓõÄʱ¼äºÍËüÊÇÄÄÒ»¸öGenerationÒ²ÓйØÏµ£¬Young GenerationµÄÿ´ÎGC²Ù×÷ʱ¼äÊÇ×î¶ÌµÄ£¬Old GenerationÆä´Î£¬Permanent Generation×¡£Ö´ÐÐʱ¼äµÄ³¤¶ÌÒ²ºÍµ±Ç°GenerationÖеĶÔÏóÊýÁ¿Óйأ¬±éÀú²éÕÒ20000¸ö¶ÔÏó±ÈÆð±éÀú50¸ö¶ÔÏó×ÔÈ»ÊÇÒªÂýºÜ¶àµÄ¡£
ËäÈ»GoogleµÄ¹¤³ÌʦÔÚ¾¡Á¿Ëõ¶Ìÿ´ÎGCËù»¨·ÑµÄʱ¼ä£¬µ«ÊÇÌØ±ð×¢ÒâGCÒýÆðµÄÐÔÄÜÎÊÌ⻹ÊǺÜÓбØÒª¡£Èç¹û²»Ð¡ÐÄÔÚ×îСµÄforÑ»·µ¥ÔªÀïÃæÖ´ÐÐÁË´´½¨¶ÔÏóµÄ²Ù×÷£¬Õ⽫ºÜÈÝÒ×ÒýÆðGC²¢µ¼ÖÂÐÔÄÜÎÊÌ⡣ͨ¹ýMemory MonitorÎÒÃÇ¿ÉÒԲ鿴µ½ÄÚ´æµÄÕ¼ÓÃÇé¿ö£¬Ã¿Ò»´Î˲¼äµÄÄÚ´æ½µµÍ¶¼ÊÇÒòΪ´Ëʱ·¢ÉúÁËGC²Ù×÷£¬Èç¹ûÔÚ¶Ìʱ¼äÄÚ·¢Éú´óÁ¿µÄÄÚ´æÉÏÕÇÓë½µµÍµÄʼþ£¬Õâ˵Ã÷ºÜÓпÉÄÜÕâÀïÓÐÐÔÄÜÎÊÌâ¡£ÎÒÃÇ»¹¿ÉÒÔͨ¹ýHeap and Allocation Tracker¹¤¾ßÀ´²é¿´´ËʱÄÚ´æÖзÖÅäµÄµ½µ×ÓÐÄÄЩ¶ÔÏó¡£
11) Performance Cost of Memory Leaks
ËäÈ»JavaÓÐ×Ô¶¯»ØÊյĻúÖÆ£¬¿ÉÊÇÕâ²»Òâζ×ÅJavaÖв»´æÔÚÄÚ´æÐ¹Â©µÄÎÊÌ⣬¶øÄÚ´æÐ¹Â©»áºÜÈÝÒ×µ¼ÖÂÑÏÖØµÄÐÔÄÜÎÊÌâ¡£
ÄÚ´æÐ¹Â©Ö¸µÄÊÇÄÇЩ³ÌÐò²»ÔÙʹÓõĶÔÏóÎÞ·¨±»GCʶ±ð£¬ÕâÑù¾Íµ¼ÖÂÕâ¸ö¶ÔÏóÒ»Ö±ÁôÔÚÄÚ´æµ±ÖУ¬Õ¼ÓÃÁ˱¦¹óµÄÄÚ´æ¿Õ¼ä¡£ÏÔÈ»£¬Õ⻹ʹµÃÿ¼¶GenerationµÄÄÚ´æÇøÓò¿ÉÓÿռä±äС£¬GC¾Í»á¸üÈÝÒ×±»´¥·¢£¬´Ó¶øÒýÆðÐÔÄÜÎÊÌâ¡£
ѰÕÒÄÚ´æÐ¹Â©²¢ÐÞ¸´Õâ¸ö©¶´ÊǼþºÜ¼¬ÊÖµÄÊÂÇ飬ÄãÐèÒª¶ÔÖ´ÐеĴúÂëºÜÊìϤ£¬Çå³þµÄÖªµÀÔÚÌØ¶¨»·¾³ÏÂÊÇÈçºÎÔËÐеģ¬È»ºó×ÐϸÅŲ顣ÀýÈ磬ÄãÏëÖªµÀ³ÌÐòÖеÄij¸öactivityÍ˳öµÄʱºò£¬Ëü֮ǰËùÕ¼ÓõÄÄÚ´æÊÇ·ñÓÐÍêÕûµÄÊͷŸɾ»ÁË£¿Ê×ÏÈÄãÐèÒªÔÚactivity´¦ÓÚǰ̨µÄʱºòʹÓÃHeap Tool»ñȡһ·Ýµ±Ç°×´Ì¬µÄÄÚ´æ¿ìÕÕ£¬È»ºóÄãÐèÒª´´½¨Ò»¸ö¼¸ºõ²»ÕâôռÓÃÄÚ´æµÄ¿Õ°×activityÓÃÀ´¸øÇ°Ò»¸öActivity½øÐÐÌø×ª£¬Æä´ÎÔÚÌø×ªµ½Õâ¸ö¿Õ°×µÄactivityµÄʱºòÖ÷¶¯µ÷ÓÃSystem.gc()·½·¨À´È·±£´¥·¢Ò»¸öGC²Ù×÷¡£×îºó£¬Èç¹ûÇ°ÃæÕâ¸öactivityµÄÄÚ´æ¶¼ÓÐÈ«²¿ÕýÈ·ÊÍ·Å£¬ÄÇôÔÚ¿Õ°×activity±»Æô¶¯Ö®ºóµÄÄÚ´æ¿ìÕÕÖÐÓ¦¸Ã²»»áÓÐÇ°ÃæÄǸöactivityÖеÄÈκζÔÏóÁË¡£

Èç¹ûÄã·¢ÏÖÔÚ¿Õ°×activityµÄÄÚ´æ¿ìÕÕÖÐÓÐһЩ¿ÉÒɵÄûÓб»ÊͷŵĶÔÏó´æÔÚ£¬ÄÇô½ÓÏÂÈ¥¾ÍÓ¦¸ÃʹÓÃAlocation Track ToolÀ´×Ðϸ²éÕÒ¾ßÌåµÄ¿ÉÒɶÔÏó¡£ÎÒÃÇ¿ÉÒÔ´Ó¿Õ°×activity¿ªÊ¼¼àÌý£¬Æô¶¯µ½¹Û²ìactivity£¬È»ºóÔٻص½¿Õ°×activity½áÊø¼àÌý¡£ÕâÑù²Ù×÷ÒÔºó£¬ÎÒÃÇ¿ÉÒÔ×Ðϸ¹Û²ìÄÇЩ¶ÔÏó£¬ÕÒ³öÄÚ´æÐ¹Â©µÄÕæÐס£

12) Memory Performance
ͨ³£À´Ëµ£¬Android¶ÔGC×öÁË´óÁ¿µÄÓÅ»¯²Ù×÷£¬ËäȻִÐÐGC²Ù×÷µÄʱºò»áÔÝÍ£ÆäËûÈÎÎñ£¬¿ÉÊÇ´ó¶àÊýÇé¿öÏ£¬GC²Ù×÷»¹ÊÇÏà¶ÔºÜ°²¾²²¢ÇÒ¸ßЧµÄ¡£µ«ÊÇÈç¹ûÎÒÃǶÔÄÚ´æµÄʹÓò»Ç¡µ±£¬µ¼ÖÂGCƵ·±Ö´ÐУ¬ÕâÑù¾Í»áÒýÆð²»Ð¡µÄÐÔÄÜÎÊÌâ¡£
ΪÁËѰÕÒÄÚ´æµÄÐÔÄÜÎÊÌ⣬Android StudioÌṩÁ˹¤¾ßÀ´°ïÖú¿ª·¢Õß¡£
- Memory Monitor£º²é¿´Õû¸öappËùÕ¼ÓõÄÄڴ棬ÒÔ¼°·¢ÉúGCµÄʱ¿Ì£¬¶Ìʱ¼äÄÚ·¢Éú´óÁ¿µÄGC²Ù×÷ÊÇÒ»¸öΣÏÕµÄÐźš£
- Allocation Tracker£ºÊ¹Óô˹¤¾ßÀ´×·×ÙÄÚ´æµÄ·ÖÅä£¬Ç°ÃæÓÐÌáµ½¹ý¡£
- Heap Tool£º²é¿´µ±Ç°ÄÚ´æ¿ìÕÕ£¬±ãÓڶԱȷÖÎöÄÄЩ¶ÔÏóÓпÉÄÜÊÇй©Á˵ģ¬Çë²Î¿¼Ç°ÃæµÄCase¡£
13) Tool - Memory Monitor
Android StudioÖеÄMemory Monitor¿ÉÒԺܺõİï×éÎÒÃDz鿴³ÌÐòµÄÄÚ´æÊ¹ÓÃÇé¿ö¡£



14) Battery Performance
µçÁ¿ÆäʵÊÇĿǰÊÖ³ÖÉ豸×¹óµÄ×ÊÔ´Ö®Ò»£¬´ó¶àÊýÉ豸¶¼ÐèÒª²»¶ÏµÄ³äµçÀ´Î¬³Ö¼ÌÐøÊ¹Óᣲ»ÐÒµÄÊÇ£¬¶ÔÓÚ¿ª·¢ÕßÀ´Ëµ£¬µçÁ¿ÓÅ»¯ÊÇËûÃÇ×îºó²Å»á¿¼ÂǵĵÄÊÂÇé¡£µ«ÊÇ¿ÉÒÔÈ·¶¨µÄÊÇ£¬Ç§Íò²»ÄÜÈÃÄãµÄÓ¦ÓóÉΪÏûºÄµçÁ¿µÄ´ó»§¡£
Purdue UniversityÑо¿ÁË×îÊÜ»¶ÓµÄһЩӦÓõĵçÁ¿ÏûºÄ£¬Æ½¾ùÖ»ÓÐ30%×óÓҵĵçÁ¿ÊDZ»³ÌÐò×îºËÐĵķ½·¨ÀýÈç»æÖÆÍ¼Æ¬£¬°Ú·Å²¼¾ÖµÈµÈËùʹÓõôµÄ£¬Ê£ÏµÄ70%×óÓҵĵçÁ¿ÊDZ»Éϱ¨Êý¾Ý£¬¼ì²éλÖÃÐÅÏ¢£¬¶¨Ê±¼ìË÷ºǫ́¹ã¸æÐÅÏ¢ËùʹÓõôµÄ¡£ÈçºÎƽºâÕâÁ½ÕߵĵçÁ¿ÏûºÄ£¬¾ÍÏԵ÷dz£ÖØÒªÁË¡£
ÓÐÏÂÃæÒ»Ð©´ëÊ©Äܹ»ÏÔÖø¼õÉÙµçÁ¿µÄÏûºÄ£º
- ÎÒÃÇÓ¦¸Ã¾¡Á¿¼õÉÙ»½ÐÑÆÁÄ»µÄ´ÎÊýÓë³ÖÐøµÄʱ¼ä£¬Ê¹ÓÃWakeLockÀ´´¦Àí»½ÐѵÄÎÊÌ⣬Äܹ»ÕýÈ·Ö´Ðл½ÐѲÙ×÷²¢¸ù¾ÝÉ趨¼°Ê±¹Ø±Õ²Ù×÷½øÈë˯Ãß״̬¡£
- ijЩ·Ç±ØÐëÂíÉÏÖ´ÐеIJÙ×÷£¬ÀýÈçÉÏ´«¸èÇú£¬Í¼Æ¬´¦ÀíµÈ£¬¿ÉÒԵȵ½É豸´¦ÓÚ³äµç״̬»òÕßµçÁ¿³ä×ãµÄʱºò²Å½øÐС£
- ´¥·¢ÍøÂçÇëÇóµÄ²Ù×÷£¬Ã¿´Î¶¼»á±£³ÖÎÞÏßÐźųÖÐøÒ»¶Îʱ¼ä£¬ÎÒÃÇ¿ÉÒÔ°ÑÁãÉ¢µÄÍøÂçÇëÇó´ò°ü½øÐÐÒ»´Î²Ù×÷£¬±ÜÃâ¹ý¶àµÄÎÞÏßÐźÅÒýÆðµÄµçÁ¿ÏûºÄ¡£¹ØÓÚÍøÂçÇëÇóÒýÆðÎÞÏßÐźŵĵçÁ¿ÏûºÄ¡£
ÎÒÃÇ¿ÉÒÔͨ¹ýÊÖ»úÉèÖÃÑ¡ÏîÕÒµ½¶ÔÓ¦AppµÄµçÁ¿ÏûºÄͳ¼ÆÊý¾Ý¡£ÎÒÃÇ»¹¿ÉÒÔͨ¹ýBattery Historian ToolÀ´²é¿´ÏêϸµÄµçÁ¿ÏûºÄ¡£

Èç¹û·¢ÏÖÎÒÃǵÄAppÓеçÁ¿ÏûºÄ¹ý¶àµÄÎÊÌ⣬ÎÒÃÇ¿ÉÒÔʹÓÃJobScheduler APIÀ´¶ÔһЩÈÎÎñ½øÐж¨Ê±´¦Àí£¬ÀýÈçÎÒÃÇ¿ÉÒÔ°ÑÄÇЩÈÎÎñÖØµÄ²Ù×÷µÈµ½ÊÖ»ú´¦ÓÚ³äµç״̬£¬»òÕßÊÇÁ¬½Óµ½WiFiµÄʱºòÀ´´¦Àí¡£
15) Understanding Battery Drain on Android
µçÁ¿ÏûºÄµÄ¼ÆËãÓëͳ¼ÆÊÇÒ»¼þÂé·³¶øÇÒì¶ÜµÄÊÂÇ飬¼Ç¼µçÁ¿ÏûºÄ±¾ÉíÒ²ÊÇÒ»¸ö·ÑµçÁ¿µÄÊÂÇ顣Ψһ¿ÉÐеķ½°¸ÊÇʹÓõÚÈý·½¼à²âµçÁ¿µÄÉ豸£¬ÕâÑù²ÅÄܹ»»ñÈ¡µ½ÕæÊµµÄµçÁ¿ÏûºÄ¡£
µ±É豸´¦ÓÚ´ý»ú״̬ʱÏûºÄµÄµçÁ¿ÊǼ«Éٵģ¬ÒÔN5ΪÀý£¬´ò¿ª·ÉÐÐģʽ£¬¿ÉÒÔ´ý»ú½Ó½ü1¸öÔ¡£¿ÉÊǵãÁÁÆÁÄ»£¬Ó²¼þ¸÷¸öÄ£¿é¾ÍÐèÒª¿ªÊ¼¹¤×÷£¬Õâ»áÐèÒªÏûºÄºÜ¶àµçÁ¿¡£

ʹÓÃWakeLock»òÕßJobScheduler»½ÐÑÉ豸´¦Àí¶¨Ê±µÄÈÎÎñÖ®ºó£¬Ò»¶¨Òª¼°Ê±ÈÃÉ豸»Øµ½³õʼ״̬¡£Ã¿´Î»½ÐÑÎÞÏßÐźŽøÐÐÊý¾Ý´«µÝ£¬¶¼»áÏûºÄºÜ¶àµçÁ¿£¬Ëü±ÈWiFiµÈ²Ù×÷¸ü¼ÓµÄºÄµç¡£ÐÞ¸´µçÁ¿µÄÏûºÄÊÇÁíÍâÒ»¸öºÜ´óµÄ¿ÎÌ⣬ÕâÀï¾Í²»Õ¹¿ª¼ÌÐøÁË¡£
16) Battery Drain and WakeLocks
¸ßЧµÄ±£Áô¸ü¶àµÄµçÁ¿Óë²»¶Ï´ÙʹÓû§Ê¹ÓÃÄãµÄAppÀ´ÏûºÄµçÁ¿£¬ÕâÊÇì¶ÜµÄÑ¡ÔñÌâ¡£²»¹ýÎÒÃÇ¿ÉÒÔʹÓÃһЩ¸üºÃµÄ°ì·¨À´Æ½ºâÁ½Õß¡£
¼ÙÉèÄãµÄÊÖ»úÀïÃæ×°ÁË´óÁ¿µÄÉç½»ÀàÓ¦Ó㬼´Ê¹ÊÖ»ú´¦ÓÚ´ý»ú״̬£¬Ò²»á¾³£±»ÕâЩӦÓû½ÐÑÓÃÀ´¼ì²éͬ²½ÐµÄÊý¾ÝÐÅÏ¢¡£Android»á²»¶Ï¹Ø±Õ¸÷ÖÖÓ²¼þÀ´ÑÓ³¤ÊÖ»úµÄ´ý»úʱ¼ä£¬Ê×ÏÈÆÁÄ»»áÖ𽥱䰵ֱÖÁ¹Ø±Õ£¬È»ºóCPU½øÈë˯Ãߣ¬ÕâÒ»ÇвÙ×÷¶¼ÊÇΪÁ˽ÚÔ¼±¦¹óµÄµçÁ¿×ÊÔ´¡£µ«ÊǼ´Ê¹ÔÚÕâÖÖ˯Ãß״̬Ï£¬´ó¶àÊýÓ¦Óû¹Êǻ᳢ÊÔ½øÐй¤×÷£¬ËûÃǽ«²»¶ÏµÄ»½ÐÑÊÖ»ú¡£Ò»¸ö×î¼òµ¥µÄ»½ÐÑÊÖ»úµÄ·½·¨ÊÇʹÓÃPowerManager.WakeLockµÄAPIÀ´±£³ÖCPU¹¤×÷²¢·ÀÖ¹ÆÁÄ»±ä°µ¹Ø±Õ¡£ÕâʹµÃÊÖ»ú¿ÉÒÔ±»»½ÐÑ£¬Ö´Ðй¤×÷£¬È»ºó»Øµ½Ë¯Ãß״̬¡£ÖªµÀÈçºÎ»ñÈ¡WakeLockÊǼòµ¥µÄ£¬¿ÉÊǼ°Ê±ÊÍ·ÅWakeLockÒ²ÊǷdz£ÖØÒªµÄ£¬²»Ç¡µ±µÄʹÓÃWakeLock»áµ¼ÖÂÑÏÖØ´íÎó¡£ÀýÈçÍøÂçÇëÇóµÄÊý¾Ý·µ»ØÊ±¼ä²»È·¶¨£¬µ¼Ö±¾À´Ö»ÐèÒª10sµÄÊÂÇéÒ»Ö±µÈ´ýÁË1¸öСʱ£¬ÕâÑù»áʹµÃµçÁ¿°×°×ÀË·ÑÁË¡£ÕâÒ²ÊÇΪºÎʹÓôø³¬Ê±²ÎÊýµÄwakelock.acquice()·½·¨ÊǺܹؼüµÄ¡£µ«Êǽö½öÉèÖó¬Ê±²¢²»×ã¹»½â¾öÎÊÌ⣬ÀýÈçÉèÖö೤µÄ³¬Ê±±È½ÏºÏÊÊ£¿Ê²Ã´Ê±ºò½øÐÐÖØÊԵȵȣ¿
½â¾öÉÏÃæµÄÎÊÌ⣬ÕýÈ·µÄ·½Ê½¿ÉÄÜÊÇʹÓ÷Ǿ«×¼¶¨Ê±Æ÷¡£Í¨³£Çé¿öÏ£¬ÎÒÃÇ»áÉ趨һ¸öʱ¼ä½øÐÐij¸ö²Ù×÷£¬µ«ÊǶ¯Ì¬ÐÞ¸ÄÕâ¸öʱ¼äÒ²Ðí»á¸üºÃ¡£ÀýÈ磬Èç¹ûÓÐÁíÍâÒ»¸ö³ÌÐòÐèÒª±ÈÄãÉ趨µÄʱ¼äÍí5·ÖÖÓ»½ÐÑ£¬×îºÃÄܹ»µÈµ½ÄǸöʱºò£¬Á½¸öÈÎÎñÀ¦°óÒ»Æðͬʱ½øÐУ¬Õâ¾ÍÊǷǾ«È·¶¨Ê±Æ÷µÄºËÐŤ×÷ÔÀí¡£ÎÒÃÇ¿ÉÒÔ¶¨ÖƼƻ®µÄÈÎÎñ£¬¿ÉÊÇϵͳÈç¹û¼ì²âµ½Ò»¸ö¸üºÃµÄʱ¼ä£¬Ëü¿ÉÒÔÍÆ³ÙÄãµÄÈÎÎñ£¬ÒÔ½ÚÊ¡µçÁ¿ÏûºÄ¡£

ÕâÕýÊÇJobScheduler APIËù×öµÄÊÂÇé¡£Ëü»á¸ù¾Ýµ±Ç°µÄÇé¿öÓëÈÎÎñ£¬×éºÏ³öÀíÏëµÄ»½ÐÑʱ¼ä£¬ÀýÈçµÈµ½ÕýÔÚ³äµç»òÕßÁ¬½Óµ½WiFiµÄʱºò£¬»òÕß¼¯ÖÐÈÎÎñÒ»ÆðÖ´ÐС£ÎÒÃÇ¿ÉÒÔͨ¹ýÕâ¸öAPIʵÏֺܶàÃâ·ÑµÄµ÷¶ÈËã·¨¡£
´ÓAndroid 5.0¿ªÊ¼·¢²¼ÁËBattery History Tool£¬Ëü¿ÉÒԲ鿴³ÌÐò±»»½ÐÑµÄÆµÂÊ£¬ÓÖË»½Ðѵ쬳ÖÐøÁ˶೤µÄʱ¼ä£¬ÕâЩÐÅÏ¢¶¼¿ÉÒÔ»ñÈ¡µ½¡£
Çë¹Ø×¢³ÌÐòµÄµçÁ¿ÏûºÄ£¬Óû§¿ÉÒÔͨ¹ýÊÖ»úµÄÉèÖÃÑ¡Ïî¹Û²ìµ½ÄÇЩºÄµçÁ¿´ó»§£¬²¢¿ÉÄܾö¶¨Ð¶ÔØËûÃÇ¡£ËùÒÔ¾¡Á¿¼õÉÙ³ÌÐòµÄµçÁ¿ÏûºÄÊǷdz£ÓбØÒªµÄ¡£
|