äÖȾƪ
Google½üÆÚÔÚUdacityÉÏ·¢²¼ÁËAndroidÐÔÄÜÓÅ»¯µÄÔÚÏ߿γ̣¬·Ö±ð´ÓäÖȾ£¬ÔËËãÓëÄڴ棬µçÁ¿¼¸¸ö·½Ãæ½éÉÜÁËÈçºÎÈ¥ÓÅ»¯ÐÔÄÜ£¬ÕâЩ¿Î³ÌÊÇGoogle֮ǰÔÚYoutubeÉÏ·¢²¼µÄAndroidÐÔÄÜÓÅ»¯µä·¶×¨Ìâ¿Î³ÌµÄϸ»¯Óë²¹³ä¡£
1) Why Rendering Performance Matters
ÏÖÔÚÓв»ÉÙAppΪÁË´ïµ½ºÜ»ªÀöµÄÊÓ¾õЧ¹û£¬»áÐèÒªÔÚ½çÃæÉϲãµþºÜ¶àµÄÊÓͼ×é¼þ£¬µ«ÊÇÕâ»áºÜÈÝÒ×ÒýÆðÐÔÄÜÎÊÌâ¡£ÈçºÎƽºâDesignÓëPerformance¾ÍºÜÐèÒªÖÇ»ÛÁË¡£
2) Defining ¡®Jank¡¯
´ó¶àÊýÊÖ»úµÄÆÁĻˢÐÂÆµÂÊÊÇ60hz£¬Èç¹ûÔÚ1000/60=16.67msÄÚûÓа취°ÑÕâÒ»Ö¡µÄÈÎÎñÖ´ÐÐÍê±Ï£¬¾Í»á·¢Éú¶ªÖ¡µÄÏÖÏó¡£¶ªÖ¡Ô½¶à£¬Óû§¸ÐÊܵ½µÄ¿¨¶ÙÇé¿ö¾ÍÔ½ÑÏÖØ¡£

3) Rendering Pipeline: Common Problems
äÖȾ²Ù×÷ͨ³£ÒÀÀµÓÚÁ½¸öºËÐÄ×é¼þ£ºCPUÓëGPU¡£CPU¸ºÔð°üÀ¨Measure£¬Layout£¬Record£¬ExecuteµÄ¼ÆËã²Ù×÷£¬GPU¸ºÔðRasterization(Õ¤¸ñ»¯)²Ù×÷¡£CPUͨ³£´æÔÚµÄÎÊÌâµÄÔÒòÊÇ´æÔڷDZØÐèµÄÊÓͼ×é¼þ£¬Ëü²»½ö½ö»á´øÀ´Öظ´µÄ¼ÆËã²Ù×÷£¬¶øÇÒ»¹»áÕ¼ÓöîÍâµÄGPU×ÊÔ´¡£

4) 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µÄ¼ÆË㣬»æÖÆ£¬äÖȾµÈµÈ²Ù×÷¡£
5) GPU Problem: Overdraw
Overdraw(¹ý¶È»æÖÆ)ÃèÊöµÄÊÇÆÁÄ»ÉϵÄij¸öÏñËØÔÚͬһ֡µÄʱ¼äÄÚ±»»æÖÆÁ˶à´Î¡£ÔÚ¶à²ã´ÎÖØµþµÄUI½á¹¹ÀïÃæ£¬Èç¹û²»¿É¼ûµÄUIÒ²ÔÚ×ö»æÖƵIJÙ×÷£¬»áµ¼ÖÂijЩÏñËØÇøÓò±»»æÖÆÁ˶à´Î¡£ÕâÑù¾Í»áÀË·Ñ´óÁ¿µÄCPUÒÔ¼°GPU×ÊÔ´¡£

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

À¶É«¡¢µÂÌ¡¢µºì¡¢Éîºì´ú±íÁË4ÖÖ²»Í¬³Ì¶ÈµÄOverdrawÇé¿ö£¬ÎÒÃǵÄÄ¿±ê¾ÍÊǾ¡Á¿¼õÉÙºìÉ«Overdraw£¬¿´µ½¸ü¶àµÄÀ¶É«ÇøÓò¡£
6) Visualize and Fix Overdraw - Quiz & Solution
ÕâÀï¾ÙÁËÒ»¸öÀý×Ó£¬Í¨¹ýXMLÎļþ¿ÉÒÔ¿´µ½Óкü¸´¦·Ç±ØÐèµÄbackground¡£Í¨¹ý°ÑXMLÖзDZØÐèµÄbackgroundÒÆ³ýÖ®ºó£¬¿ÉÒÔÏÔÖø¼õÉÙ²¼¾ÖµÄ¹ý¶È»æÖÆ¡£ÆäÖÐÒ»¸ö±È½ÏÓÐÒâ˼µÄµØ·½ÊÇ£ºÕë¶ÔListViewÖеÄAvatar
ImageViewµÄÉèÖã¬ÔÚgetViewµÄ´úÂëÀïÃæ£¬ÅжÏÊÇ·ñ»ñÈ¡µ½¶ÔÓ¦µÄBitmap£¬ÔÚ»ñÈ¡µ½AvatarµÄͼÏñÖ®ºó£¬°ÑImageViewµÄBackgroundÉèÖÃΪTransparent£¬Ö»Óе±Í¼ÏñûÓлñÈ¡µ½µÄʱºò²ÅÉèÖöÔÓ¦µÄBackgroundռλͼƬ£¬ÕâÑù¿ÉÒÔ±ÜÃâÒòΪ¸øAvatarÉèÖñ³¾°Í¼¶øµ¼ÖµĹý¶ÈäÖȾ¡£

×ܽáһϣ¬ÓÅ»¯²½ÖèÈçÏ£º
1.ÒÆ³ýWindowĬÈϵÄBackground
2.ÒÆ³ýXML²¼¾ÖÎļþÖзDZØÐèµÄBackground
3.°´ÐèÏÔʾռλ±³¾°Í¼Æ¬
7) ClipRect & QuickReject
Ç°ÃæÓÐÌáµ½¹ý£¬¶Ô²»¿É¼ûµÄ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¸ö¾ØÐÎÏཻ£¬´Ó¶øÌø¹ýÄÇЩ·Ç¾ØÐÎÇøÓòÄڵĻæÖƲÙ×÷¡£
8) Apply clipRect and quickReject - Quiz & Solution

ÉÏÃæµÄʾÀýͼÖÐÏÔʾÁËÒ»¸ö×Ô¶¨ÒåµÄView£¬Ö÷ҪЧ¹ûÊdzÊÏÖ¶àÕÅÖØµþµÄ¿¨Æ¬¡£Õâ¸öViewµÄonDraw·½·¨ÈçÏÂͼËùʾ£º

´ò¿ª¿ª·¢ÕßÑ¡ÏîÖеÄÏÔʾ¹ý¶ÈäÖȾ£¬¿ÉÒÔ¿´µ½ÎÒÃÇÕâ¸ö×Ô¶¨ÒåµÄView²¿·ÖÇøÓò´æÔÚ׏ý¶È»æÖÆ¡£ÄÇôÊÇʲôÔÒòµ¼Ö¹ý¶È»æÖƵÄÄØ£¿

9) Fixing Overdraw with Canvas API
ÏÂÃæµÄ´úÂëÏÔʾÁËÈçºÎͨ¹ýclipRectÀ´½â¾ö×Ô¶¨ÒåViewµÄ¹ý¶È»æÖÆ£¬Ìá¸ß×Ô¶¨ÒåViewµÄ»æÖÆÐÔÄÜ£º

ÏÂÃæÊÇÓÅ»¯¹ýºóµÄЧ¹û£º

10) Layouts, Invalidations and Perf
AndroidÐèÒª°ÑXML²¼¾ÖÎļþת»»³ÉGPUÄܹ»Ê¶±ð²¢»æÖƵĶÔÏó¡£Õâ¸ö²Ù×÷ÊÇÔÚDisplayListµÄ°ïÖúÏÂÍê³ÉµÄ¡£DisplayList³ÖÓÐËùÓн«Òª½»¸øGPU»æÖƵ½ÆÁÄ»ÉϵÄÊý¾ÝÐÅÏ¢¡£
ÔÚij¸öViewµÚÒ»´ÎÐèÒª±»äÖȾʱ£¬Display List»áÒò´Ë±»´´½¨£¬µ±Õâ¸öViewÒªÏÔʾµ½ÆÁÄ»ÉÏʱ£¬ÎÒÃÇ»áÖ´ÐÐGPUµÄ»æÖÆÖ¸ÁîÀ´½øÐÐäÖȾ¡£
Èç¹ûViewµÄPropertyÊôÐÔ·¢ÉúÁ˸ı䣨ÀýÈçÒÆ¶¯Î»Öã©£¬ÎÒÃǾͽö½öÐèÒªExecute Display
List¾Í¹»ÁË¡£

È»¶øÈç¹ûÄãÐÞ¸ÄÁËViewÖеÄijЩ¿É¼û×é¼þµÄÄÚÈÝ£¬ÄÇô֮ǰµÄDisplayList¾ÍÎÞ·¨¼ÌÐøÊ¹ÓÃÁË£¬ÎÒÃÇÐèÒªÖØÐ´´½¨Ò»¸öDisplayList²¢ÖØÐÂÖ´ÐÐäÖȾָÁî¸üе½ÆÁÄ»ÉÏ¡£

Çë×¢Ò⣺ÈκÎʱºòViewÖеĻæÖÆÄÚÈÝ·¢Éú±ä»¯Ê±£¬¶¼»áÐèÒªÖØÐ´´½¨DisplayList£¬äÖȾDisplayList£¬¸üе½ÆÁÄ»ÉϵÈһϵÁвÙ×÷¡£Õâ¸öÁ÷³ÌµÄ±íÏÖÐÔÄÜÈ¡¾öÓÚÄãµÄViewµÄ¸´Ôӳ̶ȣ¬ViewµÄ״̬±ä»¯ÒÔ¼°äÖȾ¹ÜµÀµÄÖ´ÐÐÐÔÄÜ¡£¾Ù¸öÀý×Ó£¬¼ÙÉèij¸öButtonµÄ´óСÐèÒªÔö´óµ½Ä¿Ç°µÄÁ½±¶£¬ÔÚÔö´óButton´óС֮ǰ£¬ÐèҪͨ¹ý¸¸ViewÖØÐ¼ÆËã²¢°Ú·ÅÆäËû×ÓViewµÄλÖá£ÐÞ¸ÄViewµÄ´óС»á´¥·¢Õû¸öHierarcyViewµÄÖØÐ¼ÆËã´óСµÄ²Ù×÷¡£Èç¹ûÊÇÐÞ¸ÄViewµÄλÖÃÔò»á´¥·¢HierarchViewÖØÐ¼ÆËãÆäËûViewµÄλÖá£Èç¹û²¼¾ÖºÜ¸´ÔÓ£¬Õâ¾Í»áºÜÈÝÒ×µ¼ÖÂÑÏÖØµÄÐÔÄÜÎÊÌâ¡£

11) Hierarchy Viewer: Walkthrough
Hierarchy Viewer¿ÉÒÔºÜÖ±½ÓµÄ³ÊÏÖ²¼¾ÖµÄ²ã´Î¹ØÏµ£¬ÊÓͼ×é¼þµÄ¸÷ÖÖÊôÐÔ¡£ ÎÒÃÇ¿ÉÒÔͨ¹ýºì£¬»Æ£¬ÂÌÈýÖÖ²»Í¬µÄÑÕÉ«À´Çø·Ö²¼¾ÖµÄMeasure£¬Layout£¬ExecutiveµÄÏà¶ÔÐÔÄܱíÏÖÈçºÎ¡£
12) Nested Hierarchies and Performance
ÌáÉý²¼¾ÖÐÔÄܵĹؼüµãÊǾ¡Á¿±£³Ö²¼¾Ö²ã¼¶µÄ±âƽ»¯£¬±ÜÃâ³öÏÖÖØ¸´µÄǶÌײ¼¾Ö¡£ÀýÈçÏÂÃæµÄÀý×Ó£¬ÓÐ2ÐÐÏÔʾÏàͬÄÚÈݵÄÊÓͼ£¬·Ö±ðÓÃÁ½ÖÖ²»Í¬µÄд·¨À´ÊµÏÖ£¬ËûÃÇÓÐ×Ų»Í¬µÄ²ã¼¶¡£


ÏÂͼÏÔʾÁËʹÓÃ2ÖÖ²»Í¬µÄд·¨£¬ÔÚHierarchy ViewerÉϳÊÏÖ³öÀ´µÄÐÔÄܲâÊÔ²îÒ죺

13) Optimizing Your Layout
ÏÂͼ¾ÙÀýÑÝʾÁËÈçºÎÓÅ»¯ListItemµÄ²¼¾Ö£¬Í¨¹ýRelativeLayoutÌæ´ú¾É·½°¸ÖеÄǶÌ×LinearLayoutÀ´ÓÅ»¯²¼¾Ö¡£

ÔËËãÆª
1) Intro to Compute and Memory Problems
AndroidÖеÄJava´úÂë»áÐèÒª¾¹ý±àÒëÓÅ»¯ÔÙÖ´ÐеĹý³Ì¡£´úÂëµÄ²»Í¬Ð´·¨»áÓ°Ïìµ½Java±àÒëÆ÷µÄÓÅ»¯Ð§ÂÊ¡£ÀýÈçforÑ»·µÄ²»Í¬Ð´·¨¾Í»á¶Ô±àÒëÆ÷ÓÅ»¯Õâ¶Î´úÂë²úÉú²»Í¬µÄЧÂÊ£¬µ±³ÌÐòÖаüº¬´óÁ¿ÕâÖÖ¿ÉÓÅ»¯µÄ´úÂëµÄʱºò£¬ÔËËãÐÔÄܾͻá³öÏÖÎÊÌâ¡£ÏëÒªÖªµÀÈçºÎÓÅ»¯´úÂëµÄÔËËãÐÔÄܾÍÐèÒªÖªµÀ´úÂëÔÚÓ²¼þ²ãµÄÖ´ÐвîÒì¡£
2) Slow Function Performance
Èç¹ûÄãдÁËÒ»¶Î´úÂ룬ËüµÄÖ´ÐÐЧÂʱÈÏëÏóÖеÄÒª²îºÜ¶à¡£ÎÒÃÇÐèÒªÖªµÀÓÐÄÄЩÒòËØÓпÉÄÜÓ°Ïìµ½Õâ¶Î´úÂëµÄÖ´ÐÐЧÂÊ¡£ÀýÈ磺±È½ÏÁ½¸öfloatÊýÖµ´óСµÄÖ´ÐÐʱ¼äÊÇintÊýÖµµÄ4±¶×óÓÒ¡£ÕâÊÇÒòΪCPUµÄÔËËã¼Ü¹¹µ¼Öµģ¬ÈçÏÂͼËùʾ£º

ËäÈ»ÏÖ´úµÄCPU¼Ü¹¹µÃµ½Á˺ܴóµÄÌáÉý£¬Ò²Ðí²¢²»´æÔÚÉÏÃæËùʾµÄÄÇô´óµÄ²îÒ죬µ«ÊÇÕâ¸öÀý×Ó˵Ã÷ÁË´úÂëд·¨ÉϵIJîÒì»á¶ÔÔËËãÐÔÄܲúÉúºÜ´óµÄÓ°Ïì¡£
ͨ³£À´ËµÓÐÁ½ÀàÔËÐÐЧÂʲîµÄÇé¿ö£ºµÚ1ÖÖÊÇÏà¶ÔÖ´ÐÐʱ¼ä³¤µÄ·½·¨£¬ÎÒÃÇ¿ÉÒÔºÜÇáËɵÄÕÒµ½ÕâЩ·½·¨²¢×öÒ»¶¨µÄÓÅ»¯¡£µÚ2ÖÖÊÇÖ´ÐÐʱ¼ä¶Ì£¬µ«ÊÇÖ´ÐÐÆµ´ÎºÜ¸ßµÄ·½·¨£¬ÒòΪִÐдÎÊý¶à£¬ÀÛ»ýЧӦϾͻá¶ÔÐÔÄܲúÉúºÜ´óµÄÓ°Ïì¡£
ÐÞ¸´ÕâЩϸ½ÚЧÂÊÎÊÌ⣬ÐèҪʹÓÃAndroid SDKÌṩµÄ¹¤¾ß£¬½øÐÐ×ÐϸµÄ²âÁ¿£¬È»ºóÔÙ½øÐÐ΢µ÷ÐÞ¸´¡£
3) Traceview Walkthrough
ͨ¹ýAndroid Studio´ò¿ªÀïÃæµÄAndroid Device Monitor£¬Çл»µ½DDMS´°¿Ú£¬µã»÷×ó±ßÀ¸ÉÏÃæÏëÒª¸ú×ٵĽø³Ì£¬ÔÙµã»÷ÉÏÃæµÄStart
Method TracingµÄ°´Å¥£¬ÈçÏÂͼËùʾ£º

Æô¶¯¸ú×ÙÖ®ºó£¬ÔٲٿØapp£¬×öһЩÄãÏëÒª¸ú×ÙµÄʼþ£¬ÀýÈ绬¶¯listview£¬µã»÷ijЩÊÓͼ½øÈëÁíÍâÒ»¸öÒ³ÃæµÈµÈ¡£²Ù×÷ÍêÖ®ºó£¬»Øµ½Android
Device Monitor£¬Ôٴεã»÷Method TracingµÄ°´Å¥Í£Ö¹¸ú×Ù¡£´Ëʱ¹¤¾ß»áΪ¸Õ²ÅµÄ²Ù×÷Éú³ÉTraceViewµÄÏêϸÊÓͼ¡£

¹ØÓÚTraceViewÖÐÏêϸÊý¾ÝÈçºÎ²é¿´£¬ÕâÀï²»Õ¹¿ªÁË£¬ÓкܶàÎÄÕ½éÉܹý¡£
4) Batching and Caching
ΪÁËÌáÉýÔËËãÐÔÄÜ£¬ÕâÀï½éÉÜ2¸ö·Ç³£ÖØÒªµÄ¼¼Êõ£¬BatchingÓëCaching¡£
BatchingÊÇÔÚÕæÕýÖ´ÐÐÔËËã²Ù×÷֮ǰ¶ÔÊý¾Ý½øÐÐÅúÁ¿Ô¤´¦Àí£¬ÀýÈçÄãÐèÒªÓÐÕâÑùÒ»¸ö·½·¨£¬ËüµÄ×÷ÓÃÊDzéÕÒij¸öÖµÊÇ·ñ´æÔÚÓëÓÚÒ»¶ÑÊý¾ÝÖС£¼ÙÉèÒ»¸öǰÌᣬÎÒÃÇ»áÏȶÔÊý¾Ý×öÅÅÐò£¬È»ºóʹÓöþ·Ö²éÕÒ·¨À´ÅжÏÖµÊÇ·ñ´æÔÚ¡£ÎÒÃÇÏÈ¿´µÚÒ»ÖÖÇé¿ö£¬ÏÂͼÖдæÔÚ×Ŷà´ÎÖØ¸´µÄÅÅÐò²Ù×÷¡£

ÔÚÉÏÃæµÄÄÇÖÖд·¨Ï£¬Èç¹ûÊý¾ÝµÄÁ¿¼¶²¢²»´óµÄ»°£¬Ó¦¸Ã»¹¿ÉÒÔ½ÓÊÜ£¬¿ÉÊÇÈç¹ûÊý¾Ý¼¯·Ç³£´ó£¬¾Í»áÓÐÑÏÖØµÄЧÂÊÎÊÌâ¡£ÄÇôÎÒÃÇ¿´Ï¸ĽøµÄд·¨£¬°ÑÅÅÐòµÄ²Ù×÷´ò°ü°ó¶¨Ö»Ö´ÐÐÒ»´Î£º

ÉÏÃæ¾ÍÊÇBatchingµÄÒ»ÖÖʾÀý£º°ÑÖØ¸´µÄ²Ù×÷Áà³öÀ´£¬´ò°üÖ»Ö´ÐÐÒ»´Î¡£
CachingµÄÀíÄîºÜÈÝÒ×Àí½â£¬ÔÚºÜ¶à·½Ãæ¶¼ÓÐÌåÏÖ£¬ÏÂÃæ¾ÙÒ»¸öforÑ»·µÄÀý×Ó£º

ÉÏÃæÕâ2ÖÖ»ù´¡¼¼Çɷdz£ÊµÓ㬻ý¼«Ç¡µ±µÄʹÓÃÄܹ»ÏÔÖøÌáÉýÔËËãÐÔÄÜ¡£
5) Blocking the UI Thread
ÌáÉý´úÂëµÄÔËËãЧÂÊÊǸÄÉÆÐÔÄܵÄÒ»·½Ã棬ÈôúÂëÖ´ÐÐÔÚÄĸöÏß³ÌҲͬÑùºÜÖØÒª¡£ÎÒÃǶ¼ÖªµÀAndroidµÄMain
ThreadÒ²ÊÇUI Thread£¬ËüÐèÒª³Ðµ£Óû§µÄ´¥ÃþʼþµÄ·´À¡£¬½çÃæÊÓͼµÄäÖȾµÈ²Ù×÷¡£Õâ¾ÍÒâζ×Å£¬ÎÒÃDz»ÄÜÔÚMain
ThreadÀïÃæ×öÈκηÇÇáÁ¿¼¶µÄ²Ù×÷£¬ÀàËÆI/O²Ù×÷»á»¨·Ñ´óÁ¿Ê±¼ä£¬ÕâºÜÓпÉÄܻᵼÖ½çÃæäÖȾ·¢Éú¶ªÖ¡µÄÏÖÏó£¬ÉõÖÁÓпÉÄܵ¼ÖÂANR¡£·ÀÖ¹ÕâЩÎÊÌâµÄ½â¾ö°ì·¨¾ÍÊǰÑÄÇЩ¿ÉÄÜÓÐÐÔÄÜÎÊÌâµÄ´úÂëÒÆµ½·ÇUIÏ߳̽øÐвÙ×÷¡£
6) Container Performance
ÁíÍâÒ»¸öÎÒÃÇÐèҪעÒâµÄÔËËãÐÔÄÜÎÊÌâÊÇ»ù´¡Ëã·¨µÄºÏÀíÑ¡Ôñ£¬ÀýÈçðÅÝÅÅÐòÓë¿ìËÙÅÅÐòµÄÐÔÄܲîÒ죺

±ÜÃâÎÒÃÇÖØ¸´ÔìÂÖ×Ó£¬JavaÌṩÁ˺ܶàÏֳɵÄÈÝÆ÷£¬ÀýÈçVector£¬ArrayList£¬LinkedList£¬HashMapµÈµÈ£¬ÔÚAndroidÀïÃæ»¹ÓÐÐÂÔö¼ÓµÄSparseArrayµÈ£¬ÎÒÃÇÐèÒªÁ˽âÕâЩ»ù´¡ÈÝÆ÷µÄÐÔÄܲîÒìÒÔ¼°ÊÊÓó¡¾°¡£ÕâÑù²ÅÄܹ»Ñ¡ÔñºÏÊʵÄÈÝÆ÷£¬´ïµ½×î¼ÑµÄÐÔÄÜ¡£

|