µ¼¶Á
×î½üÁ½Ä꣬ƷÖÊÖÐÐļ«Á¦Íƶ¯²âÊÔ¹¤×÷×óÒÆ£¬ÒÔÆÚÄÜÌáǰ·¢ÏÖ²úÆ·µÄÎÊÌ⣬½µµÍ³É±¾¡£±ÊÕß×ÔÈÏ´úÂë»ù´¡ÄÜÁ¦»¹²»´í£¬¾ÍÏëͨ¹ý´úÂëReviewÀ´Ìáǰ·¢ÏÖһЩBug¡£
¶àÊýÏîÄ¿ÖУ¬´úÂëÆÀÉó¹¤×÷ÊÇÓÉ¿ª·¢Í¬ÊÂÏ໥ִÐеġ£µ«ÍùÍù¿ª·¢Í¬ÊÂΪÁ˸Ͻø¶È£¬²¢Ã»ÓÐʱ¼ä½øÐдúÂëÆÀÉ󣬵¼ÖºܶàÃ÷ÏÔµÄBug±»ÒÅÁôµ½Á˲âÊԽ׶Ρ£ÄÇ´úÂëÆÀÉóÊÇ·ñ¿ÉÒÔÓɲâÊÔÈËÔ±À´×öÄØ£¿ÏÔÈ»ÊÇ¿ÉÒԵġ£³ÏÈ»¶àÊý²âÊÔÈËÔ±µÄ´úÂëÄÜÁ¦Ã»Óпª·¢ÈËÔ±µÄˮƽ£¬´úÂëReviewµÄÉî¶È²»È翪·¢Í¬Ê£¬µ«Í¨¹ýʵ¼ùÖ¤Ã÷£¬²âÊÔÈËÔ±Ò²ÄÜʤÈδ󲿷ִúÂëÆÀÉóµÄ¹¤×÷¡£
×öCodeReviewµÄ·½·¨
±ÊÕßÔÚ¸Õ¿ªÊ¼×ö´úÂëReviewʱҲÊǺÁÎÞÍ·Ð÷£¬²»ÖªµÀÄÄЩ´úÂë¿ÉÄÜÓÐÎÊÌâ¡£ÄÇʱÎÒ²ÅÒâʶµ½Á˽âBug³öÏֵĸùÒò¶Ô´úÂëReviewÓÐÖÁ¹ØÖØÒªµÄ×÷Óá£
ͨ¹ý¶ÔBug¼°¿ª·¢¶ÔÓ¦Ð޸ĵĴúÂë½øÐзÖÎö£¬²¢Ó뿪·¢Í¬Ê½»Á÷£¬ÎÒÁ˽⵽һЩBug³öÏÖµÄÔÒò£¬ÒÔ¼°³ö´í´úÂëµÄÒ»Ð©ÌØÕ÷¡£µ±ÕâЩ´úÂëÌØÕ÷±»×ܽá³öÀ´ºó£¬ÎÒ½«ÕâÖÖÌØÕ÷ÓÃÓÚReviewÆäËûµÄ´úÂ룬´ËʱÄÜÂýÂýµØÄÜ·¢ÏÖһЩBugÁË£¬µ«Ð§ÂʱȽϵ͡£
ºóÀ´ÓÃAndroid Studio×Ô´øµÄLint¹¤¾ßɨÃè´úÂë¿ÉÒÔɨÃè³ö´óÁ¿ÒÉËÆÈ±Ïݵĵ㣬ÔÙͨ¹ýÈ˹¤·ÖÎö¿ÉÒÔ·¢ÏÖ²»ÉÙ¿ÕÖ¸ÕëºÍÂß¼ÉϵÄÎÊÌ⣬Review´úÂëµÄЧÂʵõ½Á˼«´óµÄÌáÉý¡£
µ«»¹ÓÐһЩ¸üÉî²ã´ÎµÄÐèÇ󣬱ÈÈçÏñһЩ¶àÌõ¼þ×éºÏµÄ´úÂë¾Í²»ÄÜͨ¹ýLintɨ³öÀ´ÁË¡£Òò´ËÎÒ°ÑÕâÐ©ÌØÊâµÄ´úÂëÌØÕ÷½øÐлã×Ü£¬ÇëÒ»¸öͬʰïæдÁËÒ»¸ö¶¨ÖÆ»¯µÄ´úÂëɨÃ蹤¾ß£¬ÀûÓÃÕâ¸ö¹¤¾ßɨÃè³ö´úÂëλÖã¬È»ºóÕë¶ÔÐÔµÄReview¡£

×ܽáÎÒµÄʵ¼ù¹ý³Ì£¬½¨Òé¸Õ¿ªÊ¼×ö´úÂëReviewµÄÅóÓÑ£¬ÏÈʹÓÃһЩҵ½ç³£ÓõŤ¾ß¿ìËÙÈëÊÖ¡£µ±»ýÀÛһЩ¾Ñéºó£¬³¢ÊÔ×Ô¼º·ÖÎöÎÊÌâ²¢×ܽá¾Ñ飬ºÃµÄ¾Ñé»ýÀÛÆðÀ´ÐγÉ×Ô¼ºµÄ֪ʶ¿âºÍ¹¤¾ß¿â£¬ÌáÉýReviewЧÂÊ¡£
Review֪ʶµã»ã×Ü
ÒÔÏÂÊDZÊÕßÔÚÆ½Ê±¹¤×÷ÖÐ×ܽá³öһЩ¾³£¿ÉÒÔ·¢ÏÖÎÊÌâµÄµã£¬Ï£Íû¶ÔͬÈÊÃÇÓÐËù°ïÖú¡£
1¡¢¿ÕÖ¸Õë
Èç¹ûÏîÄ¿ÓÐÒì³£Éϱ¨Í³¼Æ£¬¾Í»á·¢ÏÖ×î³£¼ûµÄÒì³£ÊÇ¿ÕÖ¸ÕëÒì³£(NullPointerException),´úÂëÖÐÈç¹ûʹÓÃÁËδ³õʼ»¯µÄ¶ÔÏ󶼻ᵼÖÂÕâ¸öÒì³£¡£Ò»°ã¿ª·¢¶¼»áÔÚ³ÌÐòÈë¿Ú´¦½øÐвÎÊýµÄÅпգ¬²»¹ýÕâÑù»¹²»¹»¡£ÑϸñÒâÒåÉÏ£¬ÈκÎÒ»¸ö¶ÔÏóÔÚʹÓÃǰ¶¼Ó¦¸Ã½øÐÐÅпմ¦Àí¡£
ÈçÏ´úÂëÆ¬¶ÏËùʾ£¬Ò»Ð©¿ª·¢Í¬ÊÂϰ¹ßµ±´«Èë²ÎÊýΪ¿Õʱ£¬Ö±½Ó·µ»ØÒ»¸ö¿ÕµÄ¶ÔÏó¡£µ¥´Ó±¾·½·¨µÄ½Ç¶ÈÀ´¿´ÊDz»»áÓÐÎÊÌâµÄ£¬µ«ÊÇÔÚµ÷Óñ¾·½·¨µÄµØ·½£¬Èç¹ûÍü¼Ç×öÅпմ¦Àí¾Í»á³öÏÖ¿ÕÖ¸ÕëµÄ´íÎó¡£

ÒÔÉÏʾÀýÖнϺõĴúÂëʵ¼ùÊÇ·µ»ØÒ»¸öûÓÐÔªËØµÄÁÐ±í£¬»òÕßÊǵ±²ÎÊýΪ¿Õʱֱ½ÓÏÔʽµÄÅ׳öÒ»¸öÒì³££¬Èõ÷ÓÃÕß±ØÐë´¦Àí¸ÃÒì³£¡£
Õë¶Ô¿ÕÖ¸ÕëµÄÇé¿ö£¬Ò»°ãReviewÒÔϼ¸µã£º
£¨1£©·½·¨²ÎÊýÈç¹û²»ÄÜΪ¿Õʱ£¬ÊÇ·ñ×öÁËÅпմ¦Àí£¬»òÕßÔÚ·½·¨µ÷ÓÃÕß´«Èë²ÎÊýʱÊÇ·ñÈ·±£Á˲»Îª¿Õ£»
£¨2£©·½·¨ÊÇ·ñÓзµ»ØnullµÄÇé¿ö£¬Èç¹ûÓÐÊÇ·ñ¿ÉÒÔ¸ÄΪ·µ»ØÒ»¸ö¿Õ°×¶ÔÏó£¨ÈçûÓÐÔªËØµÄÁбíµÈ£©£»
£¨3£©µ±±»µ÷Óõķ½·¨(Èçϵͳ·½·¨)·µ»ØÎªnullʱ£¬µ÷ÓÃÕßÊÇ·ñÓнøÐÐÅпմ¦Àí£»
£¨4£©Ê¹ÓõĶÔÏóÊÇ·ñÔÚʹÓÃʱÒѾ±»³õʼ»¯¡£½Ï³£¼û³öÏÖÎÊÌâµÄÇé¿öÊÇÀàµÄ³ÉÔ±£¬Èç¹ûÔÚ¹¹Ô캯ÊýÖÐûÓнøÐгõʼ»¯£¬¶øÔÚÆäËûµØ·½½øÐгõʼ»¯Ê±£¬³õʼ»¯Ê±»úÊÇδ֪µÄ£¬ÄÇô´Ëʱ¶ÔÏóʹÓÃǰһ¶¨Òª½øÐÐÅпա£
2¡¢Âß¼ÅжÏ
£¨1£©±ß½çÅжÏ
Êý×éÔ½½ç(OutOfBoundaryException)ÔÚÒ쳣ͳ¼ÆÉϱ¨ÖÐÒ²ÊDZȽϳ£¼ûµÄÎÊÌâ,ÕâÊÇ×î³£¼ûµÄÒ»Öֱ߽çÌõ¼þ²»ÕýÈ·ÒýÆðµÄÎÊÌâ¡£
Êý×é»òÕßÁбí±ß½çÒ»°ãReviewµÄµãÓÐÒÔϼ¸¸ö£º
1£© Êý×é»òÁбíµÄÑ»·ÖУ¬ºÏ·¨Ï±귶ΧÊÇ0<=K<list.size()£»
2£©Í¨¹ýϱê´ÓÊý×é»òÁбíÈ¡Êý¾Ýʱ£¬Ï±겻ºÏ·¨µÄÅжϷ½·¨ÊÇif (k < 0 || k >=
list.size())£»
3£©µ±ÔÚÏÂ±ê´æÔÚ¼Ó¼õʱ,ÐèÒªÅжϵ±¼ÓÉÏ»ò¼õȥijֵºó,ÊÇ·ñ¿ÉÄÜ´æÔÚÔ½½çµÄÇé¿ö£»
4£©Èç¹ûÊÇ·Ö¸ô×Ö·û´®²úÉúµÄÊý×飬ȡÊý×éµÄֵǰһ¶¨ÒªÅжÏϱêÊÇÔÚÊý×鳤¶È·¶Î§Äڵģ»
5£©È¡Êý×é»òÁбíµÄÏîʱ£¬ÐèÒªÊ×ÏÈÅжÏÊý×é»òÁбíµÄ³¤¶È²»Îª0¡£
£¨2£©Âß¼ÅжÏ
ÈκÎÒ»¸öifÓï¾ä¶¼ÓÐÁ½¸ö·ÖÖ§¡£µ±½öÓÐÒ»¸öifʱ£¬¿ª·¢Ò»°ã²»»á©µôif-elseÁ½¸ö·ÖÖ§¡£
µ«ÈçÏÂÃæµÄʾÀý´úÂ룬±¾Éí¿ÉÄܲ»´æÔÚÎÊÌâ¡£µ«¿ÉÒÔ¿´³ö×éºÏÆðÀ´µÄÌõ¼þ·ÖÖ§»áÓкܶ࣬µ±if-elseif-else×éºÏǶÌ×ʱ£¬¿ª·¢Í¬Ê»áÖØµã¹Ø×¢Âú×ãÐèÒªÌõ¼þµÄÇé¿ö£¬È´ÍùÍùÈÝÒ׺öÂÔelseÓ¦¸Ã×öµÄ´¦Àí¡£ÏñÒÔϵÄʾÀý´úÂ룬ҲҪ˼¿¼ÊÇ·ñÄܽ«ÅжÏÌõ¼þ×éºÏÀ´Ó㬼õÉÙǶÌס£

ÁíÍâ¶àÌõ¼þ×éºÏµÄÅжÏÂß¼£¬ÌرðÊÇÅжÏÌõ¼þ³¬¹ýÁ½¸öʱ£¬»òÕßÊÇ¡°&&¡±Óë¡°||¡±×éºÏʹÓÃʱҲ·Ç³£ÈÝÒ׳ö´í¡£
ÈçϵÄʾÀý´úÂ룬Ê×ÏÈÕâ¶Î´úÂë²»ÈÝÒ×Àí½â£¬¿´µ½Õâ¶Î´úÂëʱÐèÒªÏëÏë¡°&&¡±Óë¡°||¡±ÄĸöµÄÓÅÏȼ¶¸ß£¬Èç¹ûÓÃÀ¨ºÅ°üÆðÀ´¾Í»á¸üÈÝÒ×Àí½â£»Æä´Î¾¹ýÏêϸ·ÖÎöºó·¢ÏÖ×îÖÕ½á¹ûÓëisCacheCurrentChapterµÄÖµÎ޹ء£

ÓÖÈçÏÂÃæµÄʾÀý´úÂ룬doSomethingµÄ·½·¨½ÓÊܵIJÎÊý²»Îª¿Õ£¬È»¶øµ±aµÄֵΪ¿Õʱ»áÖжϺóÐøÅжÏÂß¼,b¼´Ê¹Îª¿ÕÒ²»á´«Èëµ½doSomething·½·¨ÖУ¬µ¼ÖÂdoSomething²»ÄÜÕý³£ÔËÐС£

Òò´Ë£¬¶ÔÓÚÒÔÉÏÀàËÆµÄÅжÏÂß¼´úÂ룬¿ÉÒÔ×öµÄÆÀÉóÓÐÈýµã:
1£©ÊÇ·ñÄÜÓÅ»¯ÅжÏÂß¼£¬Ê¹´úÂë¸ü¼Ó¼ò½àÒ×¶®£»
2£©ÊÇ·ñËùÓеķÖÖ§¶¼µÃµ½Á˺ÏÀíµÄ´¦Àí£¬Èç´úÂëÖÐûÓÐд³öÀ´µÄelse·ÖÖ§£¬»òÕßSwitchµÄdefault·ÖÖ§£»
3£©ÊÇ·ñ´æÔÚÌõ¼þÅжϵÄÖжÏÇé¿ö£¬¶ÔºóÐøÒ»Ð©ÅжϻòÕßÂß¼Ôì³ÉÓ°Ïì¡£
3¡¢º¯ÊýÖÐ;·µ»Ø
º¯ÊýÖÐ;·µ»ØÖ¸ÔÚÔËÐйý³ÌÖÐ, ´ïµ½ÁËijÖÖÌõ¼þ, ʹ³ÌÐòÖÐ;returnµÄÇé¿ö¡£
ÈçÏÂÃæµÄ´úÂëËùʾ£¬µ±infoΪ¿Õʱֱ½Ó·µ»ØÁË£¬Õ§Ò»¿´ËƺõûÓÐÈκÎÎÊÌ⣻µ«Èç¹ûÈÏÕæµØË¼¿¼ºó£¬»á·¢ÏÖcontainer¶ÔÏó»¹ÔڵȴýÒ»¸ö»Øµ÷£¬ReviewʱÐèҪȥ¼ì²éûÓÐÖ´ÐÐÕâ¸ö»Øµ÷·½·¨ÊÇ·ñ»á´æÔÚÎÊÌâ¡£

Òò´ËÕë¶ÔÀàËÆµÄÔÚÖÐ;·µ»ØµÄÇé¿ö£¬ReviewʱÐèÒª¿´¿´ÊÇ·ñ´æÔÚreturnµ¼ÖÂijЩÂß¼²»ÄÜÕýÈ·Ö´Ðе½µÄÇé¿ö¡£
4¡¢ÄÚ´æÐ¹Â©
µ±³ÌÐòż¶û³öÏÖĪÃûÆäÃîµÄ¿¨¶Ù»òÒì³££¬ÓÖ»òÕßCrashÉϱ¨³öÏÖOOMÒ쳣ʱ£¬ÄÇ×÷Ϊ²âÊÔÈËÔ±¾Í¸ÃÒâʶµ½³ÌÐòÓÐÄÚ´æÐ¹Â©ÁË¡£
ÄÚ´æÐ¹Â©³ýÁËͨ¹ýרÃŵIJâÊÔ·½·¨À´²âÊÔÍ⣬Ҳ¿ÉÒÔͨ¹ý´úÂëReviewÀ´·¢ÏÖ¡£
¶ÔQQä¯ÀÀÆ÷µÄÄÚ´æÐ¹Â©²âÊÔ·¢ÏÖµÄBugÔÒò·ÖÎö£¬·¢ÏÖµ¼ÖÂÄÚ´æÐ¹Â©×îÆµ·±µÄÔÒò²»ÊÇͼƬ×ÊÔ´»òÕßIOÁ÷(Stream)δÊÍ·Å£¬¶øÊÇ×¢²áÁËʼþδȡÏû×¢²áÒýÆðµÄÄÚ´æÐ¹Â©¡£
ÈçÏÂÃæµÄʾÀý´úÂëËùʾ£¬FooActivity½«×Ô¼º×¢²áµ½ÁËFooDataManager£¬±ãÓÚÔÚÊý¾Ý·¢Éú±ä»¯Ê±×Ô¼ºÄÜÊÕµ½Í¨Öª¡£

ÈçÏÂÃæµÄ´úÂëËùʾ£¬FooDataManagerÒ»°ã¶¼»áÓÃÒ»¸öÁбíÀ´´æ´¢×¢²áµÄ¼àÌýÕߣ¬Èç¹ûFooDataManagerÐèÒªÔËÐкܳ¤Ê±¼äÉõÖÁÕû¸öÉúÃüÖÜÆÚ£¬»òÕßlistener±¾ÉíÊÇÒ»¸ö¾²Ì¬¶ÔÏóµÄ»°£¬ÄÇôlistener»á³¤ÆÚ´æÔÚÓÚÄÚ´æÖУ¬ÕâÒâζ×ÅlistenerÖдæ·ÅµÄ¶ÔÏóÒ²»á±»³¤ÆÚ³ÖÓУ¬×îÖÕµ¼ÖÂÄÚ´æÐ¹Â©¡£

Ç°ÃæÊ¾ÀýÖеÄFooActivity²¢Î´½«×Ô¼º·´×¢²á£¬listenerÒ»Ö±³ÖÓиöÔÏóÔì³ÉÄÚ´æÐ¹Â©¡£
ÒÔÉÏÎÊÌâ¿´ÆðÀ´ËƺõºÜ¼òµ¥£¬µ«ÊÇÔÚä¯ÀÀÆ÷ÏîÄ¿ÖУ¬¼´Ê¹¸ß¼¶µÄ¿ª·¢¹¤³ÌʦҲ»á·¸ÀàËÆµÄ´íÎó¡£µ±È»ÄÚ´æÐ¹Â©µÄÔÒò»¹Óкܶ࣬ÕâÀï¾Í²»È«²¿ÁоÙÁË£¬´ó¼Ò¿ÉÒÔÍøÉÏËÑË÷½øÐÐÁ˽⡣
Õë¶ÔÄÚ´æÐ¹Â©µÄÇé¿ö£¬ÎÒÒ»°ã»áReviewÒÔϼ¸ÖÖ³£¼ûÇé¿ö£º
£¨1£©¶ÔÏóÈç¹û×¢²áÁËʼþ»Øµ÷£¬ÊÇ·ñÔÚºÏÀíµÄµØ·½½øÐÐÁË·´×¢²á£»
£¨2£©Ï̶߳ÔÏóʹÓÃÍê±ÏÊÇ·ñÕý³£µÄ½áÊø£»
£¨3£©¸÷ÖÖÊý¾Ý¿â¡¢ÍøÂçÁ¬½ÓºÍÎļþIO±»´ò¿ªºó£¬ÊÇ·ñÕýÈ·¹Ø±Õ£»
£¨4£©Í¼Æ¬×ÊÔ´ÕýÈ·ÊÍ·Å£»
£¨5£©»º´æ¶ÔÏóÒªÓÐÒ»¶¨µÄ´óС¿ØÖÆ£¬ÇÒÓÐÃ÷È·µÄÊͷŲßÂÔ¡£
5¡¢Òì³£´¦Àí
¹ØÓÚÒì³£´¦ÀíµÄÆÀÉ󣬱ÊÕßÒ»°ã»á¹Ø×¢µ±Òì³£±»²¶»ñºó£¬ÊÇ·ñÕýÈ·µÄ´¦Àí£¬ÒÔ¼°µ±ÓÐÒì³£´¦Àíºó£¬ºóÐøµÄÁ÷³ÌÊÇ·ñÕý³£Ö´ÐС£
ÈçÏÂÃæµÄ´úÂëËùʾ£¬µ±catchµ½Ò쳣ʱ£¬´ËʱlooperÊÇΪ¿ÕµÄ£¬µ½ºóÐøµÄHandler³õʼ»¯´«Èë¿ÕµÄlooper³ÌÐò»á³ö´í¡£

Ч¹û
´úÂëÆÀÉóÔÚQQä¯ÀÀÆ÷Âþ»Ä£¿é×î½üÁËÈý¸ö°æ±¾½øÐÐÁËʵ¼ù£¬¹²·¢ÏÖBug25¸ö£¬ÈçÏÂÃæµÄ½ØÍ¼Ëùʾ¡£ÓÉÓÚ´úÂëReviweÔÚ¿ª·¢½×¶Î¾Í½øÐУ¬Bug·¢ÏÖµÄʱ¼äÌáǰÁËÖÁÉÙÒ»ÖÜ¡£

×ܽá
ÒÔÉÏÊÇÎÒµÄÒ»µã¾Ñé×ܽᣬ»¹ÐèÒª³ÖÐø»ýÀÛ¡£
ÍòÊ¿ªÍ·ÄÑ£¬¸öÈËÒÔΪ×ö´úÂëReviewÔÚ¸Õ¿ªÊ¼µÄʱºò»áÉÔ΢ÄÑһЩ£¬µ«Ö»Òª×öµ½ÒÔϼ¸µãÒ»¶¨ÄÜ×öºÃ´úÂëReview¡£
µÚÒ»£¬Ñ§»áʹÓÃһЩҵ½ç±È½Ï³£ÓõĴúÂëɨÃ蹤¾ß£¬¿ÉÒÔ¿ìËÙÈëÊÖ£»
µÚ¶þ£¬¼á³ÖѧϰÌáÉý×Ô¼ºµÄ´úÂëÄÜÁ¦£¬²¢ÕÆÎÕ¿ìËÙÔĶÁºÍÀí½â´úÂëµÄ·½·¨£»
µÚÈý£¬¼ÓÉî¶Ô×Ô¼º²úÆ·µÄÒµÎñºÍ´úÂë½á¹¹µÄÀí½â£¬¸üÈÝÒ×·¢ÏÖÉî²ãÎÊÌâ¡£
×îºó£¬Ñ§»áͨ¹ýBug¸ùÒò·ÖÎö£¬×ܽá¾Ñé²¢Ó¦ÓÃÓÚÆ½Ê±µÄ¹¤×÷ÖС£
ÒÔÉÏÄÚÈÝ·ÖÏí¸ø´ó¼Ò£¬Óë´ó¼Ò¹²Ã㣬ϣÍûÎÒÃÇÒ»Æð½ø²½£¡
|