Óв»ÉÙÅóÓѶ¼ÎʹýÎÒ£¬ÔõÑù²ÅÄÜд³ö¸ßÐÔÄܵÄÓ¦ÓóÌÐò£¬ÈçºÎ±ÜÃâ³ÌÐò³öÏÖOOM£¬»òÕßµ±³ÌÐòÄÚ´æÕ¼Óùý¸ßµÄʱºò¸ÃÔõôÑùÈ¥ÅŲ顣ȷʵ£¬Ò»¸öÓÅÐãµÄÓ¦ÓóÌÐò£¬²»½ö½öÒª¹¦ÄÜÍê³ÉµÃºÃ£¬ÐÔÄÜÎÊÌâÒ²Ó¦¸Ã´¦ÀíµÃÇ¡µ½ºÃ´¦¡£Îª´Ë£¬ÎÒÒ²ÊÇÔĶÁÁ˲»ÉÙAndroid¹Ù·½¸ø³öµÄ¸ßÐÔÄܱà³Ì½¨Ò飬ÄÇô´Ó±¾ÆªÎÄÕ¿ªÊ¼£¬ÎÒ¾Í×¼±¸¿ªÊ¼Ð´Ò»¸öÈ«ÐÂϵÁеIJ©ÎÄ£¬À´°ÑÕâЩ½¨Òé½øÐÐÕûÀíºÍ·ÖÎö£¬°ïÖú´ó¼ÒÄܹ»Ð´³ö¸ü¼Ó³öÉ«µÄÓ¦ÓóÌÐò¡£
×¢ÒⱾϵÁÐÎÄÕµÄÄÚÈÝ»ù±¾Ô´ÓÚAndroid Doc£¬Èç¹ûÏëÒªÔĶÁ¸ü¼ÓÏêϸµÄ¹ØÓÚÐÔÄÜ·½ÃæµÄ×ÊÁÏ£¬¿ÉÒÔÖ±½ÓÈ¥ÔĶÁAndroid¹Ù·½Îĵµ¡£
ÄÚ´æ(RAM)¶ÔÓÚÈκÎÒ»¸öÈí¼þ¿ª·¢»·¾³¶¼ÊÇÖַdz£Õä¹óµÄ×ÊÔ´£¬¶ø¶ÔÓÚÒÆ¶¯²Ù×÷ϵͳÀ´½²µÄ»°£¬Ôò»áÏԵøü¼ÓÕä¹ó£¬ÒòΪÊÖ»úµÄÓ²¼þÌõ¼þÏà¶ÔÓÚPC±Ï¾¹ÊDZȽÏÂäºóµÄ¡£¾¡¹ÜAndroidϵͳµÄÐéÄâ»úÓµÓÐ×Ô¶¯»ØÊÕÀ¬»øµÄ»úÖÆ£¬µ«Õâ²¢²»´ú±íÎÒÃǾͿÉÒÔºöÊÓÓ¦¸ÃÔÚʲôʱºò·ÖÅäºÍÊÍ·ÅÄÚ´æ¡£
ΪÁËʹÀ¬»ø»ØÊÕÆ÷¿ÉÒÔÕý³£ÊͷųÌÐòËùÕ¼ÓõÄÄڴ棬ÔÚ±àд´úÂëµÄʱºò¾ÍÒ»¶¨Òª×¢Ò⾡Á¿±ÜÃâ³öÏÖÄÚ´æÐ¹Â©µÄÇé¿ö£¨Í¨³£¶¼ÊÇÓÉÓÚÈ«¾Ö³ÉÔ±±äÁ¿³ÖÓжÔÏóÒýÓÃËùµ¼Öµģ©£¬²¢ÇÒÔÚÊʵ±µÄʱºòÈ¥ÊͷŶÔÏóÒýÓ᣶ÔÓÚ´ó¶àÊýµÄÓ¦ÓóÌÐò¶øÑÔ£¬ºóÃæÆäËüµÄÊÂÇé¾Í¿ÉÒÔ¶¼½»¸øÀ¬»ø»ØÊÕÆ÷È¥Íê³ÉÁË£¬Èç¹ûÒ»¸ö¶ÔÏóµÄÒýÓò»ÔÙ±»ÆäËü¶ÔÏóËù³ÖÓУ¬ÄÇôϵͳ¾Í»á½«Õâ¸ö¶ÔÏóËù·ÖÅäµÄÄÚ´æ½øÐлØÊÕ¡£
ÎÒÃÇÔÚ¿ª·¢Èí¼þµÄʱºòÓ¦µ±×ÔʼÖÁÖÕ¶¼°ÑÄÚ´æµÄÎÊÌâ³ä·Ö¿¼ÂǽøÈ¥£¬ÕâÑùµÄ»°²ÅÄÜ¿ª·¢³ö¸ü¼Ó¸ßÐÔÄܵÄÈí¼þ¡£¶øÄÚ´æÎÊÌâÒ²²¢²»ÊÇÎÞ¹æÂÉ¿ÉÐеģ¬Androidϵͳ¸øÎÒÃÇÌá³öÁ˺ܶàÄÚ´æÓÅ»¯µÄ½¨Òé¼¼ÇÉ£¬Ö»Òª°´ÕÕÕâЩ¼¼ÇÉÀ´±àд³ÌÐò£¬¾Í¿ÉÒÔÈÃÎÒÃǵijÌÐòÔÚÄÚ´æÐÔÄÜ·¢Ãæ±íÏÖµÃÏ൱²»´í£¬ÏÂÃæÎÒÃǾÍÀ´Ò»Ò»Ñ§Ï°Ò»ÏÂÕâЩ¼¼ÇÉ¡£
½ÚÖÆµØÊ¹ÓÃService
Èç¹ûÓ¦ÓóÌÐòµ±ÖÐÐèҪʹÓÃServiceÀ´Ö´Ðкǫ́ÈÎÎñµÄ»°£¬ÇëÒ»¶¨Òª×¢ÒâÖ»Óе±ÈÎÎñÕýÔÚÖ´ÐеÄʱºò²ÅÓ¦¸ÃÈÃServiceÔËÐÐÆðÀ´¡£ÁíÍ⣬µ±ÈÎÎñÖ´ÐÐÍêÖ®ºóȥֹͣServiceµÄʱºò£¬ÒªÐ¡ÐÄServiceֹͣʧ°Üµ¼ÖÂÄÚ´æÐ¹Â©µÄÇé¿ö¡£
µ±ÎÒÃÇÆô¶¯Ò»¸öServiceʱ£¬ÏµÍ³»áÇãÏòÓÚ½«Õâ¸öServiceËùÒÀÀµµÄ½ø³Ì½øÐб£Áô£¬ÕâÑù¾Í»áµ¼ÖÂÕâ¸ö½ø³Ì±äµÃ·Ç³£ÏûºÄÄÚ´æ¡£²¢ÇÒ£¬ÏµÍ³¿ÉÒÔÔÚLRU
cacheµ±Öлº´æµÄ½ø³ÌÊýÁ¿Ò²»á¼õÉÙ£¬µ¼ÖÂÇл»Ó¦ÓóÌÐòµÄʱºòºÄ·Ñ¸ü¶àÐÔÄÜ¡£ÑÏÖØµÄ»°£¬ÉõÖÁÓпÉÄܻᵼÖ±ÀÀ££¬ÒòΪϵͳÔÚÄÚ´æ·Ç³£³Ô½ôµÄʱºò¿ÉÄÜÒÑÎÞ·¨Î¬»¤ËùÓÐÕýÔÚÔËÐеÄServiceËùÒÀÀµµÄ½ø³ÌÁË¡£
ΪÁËÄܹ»¿ØÖÆServiceµÄÉúÃüÖÜÆÚ£¬Android¹Ù·½ÍƼöµÄ×î¼Ñ½â¾ö·½°¸¾ÍÊÇʹÓÃIntentService£¬ÕâÖÖServiceµÄ×î´óÌØµã¾ÍÊǵ±ºǫ́ÈÎÎñÖ´ÐнáÊøºó»á×Ô¶¯Í£Ö¹£¬´Ó¶ø¼«´ó³Ì¶ÈÉϱÜÃâÁËServiceÄÚ´æÐ¹Â©µÄ¿ÉÄÜÐÔ¡£¹ØÓÚIntentService¸ü¼ÓÏêϸµÄÓ÷¨½²½â£¬¿ÉÒԲο¼¡¶µÚÒ»ÐдúÂ롪¡ªAndroid¡·µÄ9.5.2½Ú¡£
ÈÃÒ»¸öServiceÔÚºǫ́һֱ±£³ÖÔËÐУ¬¼´Ê¹Ëü²¢²»Ö´ÐÐÈκι¤×÷£¬ÕâÊDZàдAndroid³ÌÐòʱ×îÔã¸âµÄ×ö·¨Ö®Ò»¡£ËùÒÔAndroid¹Ù·½¼«¶È½¨Ò鿪·¢ÈËÔ±ÃDz»Òª¹ýÓṴ́À·£¬ÈÃServiceÔÚºǫ́һֱÔËÐУ¬Õâ²»½ö¿ÉÄܻᵼÖÂÊÖ»úºÍ³ÌÐòµÄÐÔÄܷdz£µÍÏ£¬¶øÇÒ±»Óû§·¢ÏÖÁËÖ®ºóÒ²ÓпÉÄÜÖ±½Óµ¼ÖÂÎÒÃǵÄÈí¼þ±»Ð¶ÔØ£¨ÎÒ¸öÈ˾ͻáÕâô×ö£©¡£
µ±½çÃæ²»¿É¼ûʱÊÍ·ÅÄÚ´æ
µ±Óû§´ò¿ªÁËÁíÍâÒ»¸ö³ÌÐò£¬ÎÒÃǵijÌÐò½çÃæÒѾ²»ÔٿɼûµÄʱºò£¬ÎÒÃÇÓ¦µ±½«ËùÓкͽçÃæÏà¹ØµÄ×ÊÔ´½øÐÐÊÍ·Å¡£ÔÚÕâÖÖ³¡¾°ÏÂÊÍ·Å×ÊÔ´¿ÉÒÔÈÃϵͳ»º´æºǫ́½ø³ÌµÄÄÜÁ¦ÏÔÖøÔö¼Ó£¬Òò´ËÒ²»áÈÃÓû§ÌåÑé±äµÃ¸üºÃ¡£
ÄÇôÎÒÃÇÈçºÎ²ÅÄÜÖªµÀ³ÌÐò½çÃæÊDz»ÊÇÒѾ²»¿É¼ûÁËÄØ£¿ÆäʵºÜ¼òµ¥£¬Ö»ÐèÒªÔÚActivityÖÐÖØÐ´onTrimMemory()·½·¨£¬È»ºóÔÚÕâ¸ö·½·¨ÖмàÌýTRIM_MEMORY_UI_HIDDENÕâ¸ö¼¶±ð£¬Ò»µ©´¥·¢ÁËÖ®ºó¾Í˵Ã÷Óû§ÒѾÀ뿪ÁËÎÒÃǵijÌÐò£¬ÄÇô´Ëʱ¾Í¿ÉÒÔ½øÐÐ×ÊÔ´ÊͷŲÙ×÷ÁË£¬ÈçÏÂËùʾ£º
@Override public void onTrimMemory(int level) { super.onTrimMemory(level); switch (level) { case TRIM_MEMORY_UI_HIDDEN: // ½øÐÐ×ÊÔ´ÊͷŲÙ×÷ break; } } |
×¢ÒâonTrimMemory()·½·¨ÖеÄTRIM_MEMORY_UI_HIDDEN»Øµ÷Ö»Óе±ÎÒÃdzÌÐòÖеÄËùÓÐUI×é¼þÈ«²¿²»¿É¼ûµÄʱºò²Å»á´¥·¢£¬ÕâºÍonStop()·½·¨»¹ÊÇÓкܴóÇø±ðµÄ£¬ÒòΪonStop()·½·¨Ö»Êǵ±Ò»¸öActivityÍêÈ«²»¿É¼ûµÄʱºò¾Í»áµ÷Ó㬱ÈÈç˵Óû§´ò¿ªÁËÎÒÃdzÌÐòÖеÄÁíÒ»¸öActivity¡£Òò´Ë£¬ÎÒÃÇ¿ÉÒÔÔÚonStop()·½·¨ÖÐÈ¥ÊÍ·ÅһЩActivityÏà¹ØµÄ×ÊÔ´£¬±ÈÈç˵ȡÏûÍøÂçÁ¬½Ó»òÕß×¢Ïú¹ã²¥½ÓÊÕÆ÷µÈ£¬µ«ÊÇÏñUIÏà¹ØµÄ×ÊÔ´Ó¦¸ÃÒ»Ö±ÒªµÈµ½onTrimMemory(TRIM_MEMORY_UI_HIDDEN)Õâ¸ö»Øµ÷Ö®ºó²ÅÈ¥ÊÍ·Å£¬ÕâÑù¿ÉÒÔ±£Ö¤Èç¹ûÓû§Ö»ÊÇ´ÓÎÒÃdzÌÐòµÄÒ»¸öActivity»Øµ½ÁËÁíÍâÒ»¸öActivity£¬½çÃæÏà¹ØµÄ×ÊÔ´¶¼²»ÐèÒªÖØÐ¼ÓÔØ£¬´Ó¶øÌáÉýÏìÓ¦ËÙ¶È¡£
µ±ÄÚ´æ½ôÕÅʱÊÍ·ÅÄÚ´æ
³ýÁ˸ղ޲µÄTRIM_MEMORY_UI_HIDDENÕâ¸ö»Øµ÷£¬onTrimMemory()·½·¨»¹ÓкܶàÖÖÆäËüÀàÐ͵Ļص÷£¬¿ÉÒÔÔÚÊÖ»úÄÚ´æ½µµÍµÄʱºò¼°Ê±Í¨ÖªÎÒÃÇ¡£ÎÒÃÇÓ¦¸Ã¸ù¾Ý»Øµ÷Öд«ÈëµÄ¼¶±ðÀ´È¥¾ö¶¨ÈçºÎÊÍ·ÅÓ¦ÓóÌÐòµÄ×ÊÔ´£º
TRIM_MEMORY_RUNNING_MODERATE ±íʾӦÓóÌÐòÕý³£ÔËÐУ¬²¢ÇÒ²»»á±»É±µô¡£µ«ÊÇĿǰÊÖ»úµÄÄÚ´æÒѾÓеãµÍÁË£¬ÏµÍ³¿ÉÄܻῪʼ¸ù¾ÝLRU»º´æ¹æÔòÀ´È¥É±ËÀ½ø³ÌÁË¡£
TRIM_MEMORY_RUNNING_LOW ±íʾӦÓóÌÐòÕý³£ÔËÐУ¬²¢ÇÒ²»»á±»É±µô¡£µ«ÊÇĿǰÊÖ»úµÄÄÚ´æÒѾ·Ç³£µÍÁË£¬ÎÒÃÇÓ¦¸ÃÈ¥ÊͷŵôһЩ²»±ØÒªµÄ×ÊÔ´ÒÔÌáÉýϵͳµÄÐÔÄÜ£¬Í¬Ê±ÕâÒ²»áÖ±½ÓÓ°Ïìµ½ÎÒÃÇÓ¦ÓóÌÐòµÄÐÔÄÜ¡£
TRIM_MEMORY_RUNNING_CRITICAL ±íʾӦÓóÌÐòÈÔÈ»Õý³£ÔËÐУ¬µ«ÊÇϵͳÒѾ¸ù¾ÝLRU»º´æ¹æÔòɱµôÁ˴󲿷ֻº´æµÄ½ø³ÌÁË¡£Õâ¸öʱºòÎÒÃÇÓ¦µ±¾¡¿ÉÄܵØÈ¥ÊÍ·ÅÈκβ»±ØÒªµÄ×ÊÔ´£¬²»È»µÄ»°ÏµÍ³¿ÉÄÜ»á¼ÌÐøÉ±µôËùÓлº´æÖеĽø³Ì£¬²¢ÇÒ¿ªÊ¼É±µôһЩ±¾À´Ó¦µ±±£³ÖÔËÐеĽø³Ì£¬±ÈÈç˵ºǫ́ÔËÐеķþÎñ¡£
ÒÔÉÏÊǵ±ÎÒÃǵÄÓ¦ÓóÌÐòÕýÔÚÔËÐÐʱµÄ»Øµ÷£¬ÄÇôÈç¹ûÎÒÃǵijÌÐòĿǰÊDZ»»º´æµÄ£¬Ôò»áÊÕµ½ÒÔϼ¸ÖÖÀàÐ͵Ļص÷£º
TRIM_MEMORY_BACKGROUND ±íʾÊÖ»úĿǰÄÚ´æÒѾºÜµÍÁË£¬ÏµÍ³×¼±¸¿ªÊ¼¸ù¾ÝLRU»º´æÀ´ÇåÀí½ø³Ì¡£Õâ¸öʱºòÎÒÃǵijÌÐòÔÚLRU»º´æÁбíµÄ×î½üλÖã¬ÊDz»Ì«¿ÉÄܱ»ÇåÀíµôµÄ£¬µ«ÕâʱȥÊͷŵôһЩ±È½ÏÈÝÒ×»Ö¸´µÄ×ÊÔ´Äܹ»ÈÃÊÖ»úµÄÄÚ´æ±äµÃ±È½Ï³ä×㣬´Ó¶øÈÃÎÒÃǵijÌÐò¸ü³¤Ê±¼äµØ±£ÁôÔÚ»º´æµ±ÖУ¬ÕâÑùµ±Óû§·µ»ØÎÒÃǵijÌÐòʱ»á¸Ð¾õ·Ç³£Ë³³©£¬¶ø²»ÊǾÀúÁËÒ»´ÎÖØÐÂÆô¶¯µÄ¹ý³Ì¡£
TRIM_MEMORY_MODERATE ±íʾÊÖ»úĿǰÄÚ´æÒѾºÜµÍÁË£¬²¢ÇÒÎÒÃǵijÌÐò´¦ÓÚLRU»º´æÁбíµÄÖмäλÖã¬Èç¹ûÊÖ»úÄڴ滹µÃ²»µ½½øÒ»²½Êͷŵϰ£¬ÄÇôÎÒÃǵijÌÐò¾ÍÓб»ÏµÍ³É±µôµÄ·çÏÕÁË¡£
TRIM_MEMORY_COMPLETE ±íʾÊÖ»úĿǰÄÚ´æÒѾºÜµÍÁË£¬²¢ÇÒÎÒÃǵijÌÐò´¦ÓÚLRU»º´æÁбíµÄ×î±ßԵλÖã¬ÏµÍ³»á×îÓÅÏÈ¿¼ÂÇɱµôÎÒÃǵÄÓ¦ÓóÌÐò£¬ÔÚÕâ¸öʱºòÓ¦µ±¾¡¿ÉÄܵذÑÒ»ÇпÉÒÔÊͷŵĶ«Î÷¶¼½øÐÐÊÍ·Å¡£
±ÜÃâÔÚBitmapÉÏÀË·ÑÄÚ´æ
µ±ÎÒÃǶÁȡһ¸öBitmapͼƬµÄʱºò£¬ÓÐÒ»µãÒ»¶¨Òª×¢Ò⣬¾ÍÊÇǧÍò²»ÒªÈ¥¼ÓÔØ²»ÐèÒªµÄ·Ö±æÂÊ¡£ÔÚÒ»¸öºÜСµÄImageViewÉÏÏÔʾһÕŸ߷ֱæÂʵÄͼƬ²»»á´øÀ´ÈκÎÊÓ¾õÉϵĺô¦£¬µ«È´»áÕ¼ÓÃÎÒÃÇÏ൱¶à±¦¹óµÄÄÚ´æ¡£ÐèÒª½ö¼ÇµÄÒ»µãÊÇ£¬½«Ò»ÕÅͼƬ½âÎö³ÉÒ»¸öBitmap¶ÔÏóʱËùÕ¼ÓõÄÄÚ´æ²¢²»ÊÇÕâ¸öͼƬÔÚÓ²ÅÌÖеĴóС£¬¿ÉÄÜÒ»ÕÅͼƬֻÓÐ100kÄã¾õµÃËü²¢²»´ó£¬µ«ÊǶÁÈ¡µ½ÄÚ´æµ±ÖÐÊǰ´ÕÕÏñËØµãÀ´ËãµÄ£¬±ÈÈçÕâÕÅͼƬÊÇ1500*1000ÏñËØ£¬Ê¹ÓõÄARGB_8888ÑÕÉ«ÀàÐÍ£¬ÄÇôÿ¸öÏñËØµã¾Í»áÕ¼ÓÃ4¸ö×Ö½Ú£¬×ÜÄÚ´æ¾ÍÊÇ1500*1000*4×Ö½Ú£¬Ò²¾ÍÊÇ5.7M£¬Õâ¸öÊý¾Ý¿´ÆðÀ´¾Í±È½Ï¿Ö²ÀÁË¡£
ÖÁÓÚÈçºÎȥѹËõͼƬ£¬ÒÔ¼°¸ü¶àÔÚͼƬ·½Ãæ½ÚÊ¡ÄÚ´æµÄ¼¼Êõ£¬´ó¼Ò¿ÉÒÔÈ¥²Î¿¼ÎÒ֮ǰдµÄһƪ²©¿Í Android¸ßЧ¼ÓÔØ´óͼ¡¢¶àͼ½â¾ö·½°¸£¬ÓÐЧ±ÜÃâ³ÌÐòOOM
¡£
ʹÓÃÓÅ»¯¹ýµÄÊý¾Ý¼¯ºÏ
Android APIµ±ÖÐÌṩÁËһЩÓÅ»¯¹ýºóµÄÊý¾Ý¼¯ºÏ¹¤¾ßÀ࣬ÈçSparseArray£¬SparseBooleanArray£¬ÒÔ¼°LongSparseArrayµÈ£¬Ê¹ÓÃÕâЩAPI¿ÉÒÔÈÃÎÒÃǵijÌÐò¸ü¼Ó¸ßЧ¡£´«Í³Java
APIÖÐÌṩµÄHashMap¹¤¾ßÀà»áÏà¶Ô±È½ÏµÍЧ£¬ÒòΪËüÐèҪΪÿһ¸ö¼üÖµ¶Ô¶¼Ìṩһ¸ö¶ÔÏóÈë¿Ú£¬¶øSparseArray¾Í±ÜÃâµôÁË»ù±¾Êý¾ÝÀàÐÍת»»³É¶ÔÏóÊý¾ÝÀàÐ͵Äʱ¼ä¡£
ÖªÏþÄÚ´æµÄ¿ªÖ§Çé¿ö
ÎÒÃÇ»¹Ó¦µ±Çå³þÎÒÃÇËùʹÓÃÓïÑÔµÄÄڴ濪֧ºÍÏûºÄÇé¿ö£¬²¢ÇÒÔÚÕû¸öÈí¼þµÄÉè¼ÆºÍ¿ª·¢µ±Öж¼Ó¦¸Ã½«ÕâЩÐÅÏ¢¿¼ÂÇÔÚÄÚ¡£¿ÉÄÜÓÐһЩ¿´ÆðÀ´ÎÞ¹ØÍ´Ñ÷µÄд·¨£¬½á¹ûÈ´»áµ¼ÖºܴóÒ»²¿·ÖµÄÄڴ濪֧£¬ÀýÈ磺
ʹÓÃö¾Ùͨ³£»á±ÈʹÓþ²Ì¬³£Á¿ÒªÏûºÄÁ½±¶ÒÔÉϵÄÄڴ棬ÔÚAndroid¿ª·¢µ±ÖÐÎÒÃÇÓ¦µ±¾¡¿ÉÄܵز»Ê¹ÓÃö¾Ù¡£
ÈκÎÒ»¸öJavaÀ࣬°üÀ¨ÄÚ²¿Àà¡¢ÄäÃûÀ࣬¶¼ÒªÕ¼Óôó¸Å500×Ö½ÚµÄÄÚ´æ¿Õ¼ä¡£
ÈκÎÒ»¸öÀàµÄʵÀýÒªÏûºÄ12-16×Ö½ÚµÄÄڴ濪֧£¬Òò´ËƵ·±´´½¨ÊµÀýÒ²ÊÇ»áÒ»¶¨³ÌÐòÉÏÓ°ÏìÄÚ´æµÄ¡£
ÔÚʹÓÃHashMapʱ£¬¼´Ê¹ÄãÖ»ÉèÖÃÁËÒ»¸ö»ù±¾Êý¾ÝÀàÐ͵ļü£¬±ÈÈç˵int£¬µ«ÊÇÒ²»á°´ÕÕ¶ÔÏóµÄ´óСÀ´·ÖÅäÄڴ棬´ó¸ÅÊÇ32×Ö½Ú£¬¶ø²»ÊÇ4×Ö½Ú¡£Òò´Ë×îºÃµÄ°ì·¨¾ÍÊÇÏñÉÏÃæËù˵µÄÒ»Ñù£¬Ê¹ÓÃÓÅ»¯¹ýµÄÊý¾Ý¼¯ºÏ¡£
½÷É÷ʹÓóéÏó±à³Ì
Ðí¶à³ÌÐòÔ±¶¼Ï²»¶¸÷ÖÖʹÓóéÏóÀ´±à³Ì£¬ÈÏΪÕâÊÇÒ»Öֺܺõıà³Ìϰ¹ß¡£µ±È»£¬ÕâÒ»µã²»¿É·ñÈÏ£¬ÒòΪµÄ³éÏóµÄ±à³Ì·½·¨¸ü¼ÓÃæÏò¶ÔÏ󣬶øÇÒÔÚ´úÂëµÄά»¤ºÍ¿ÉÀ©Õ¹ÐÔ·½Ãæ¶¼»áÓÐËùÌá¸ß¡£µ«ÊÇ£¬ÔÚAndroidÉÏʹÓóéÏó»á´øÀ´¶îÍâµÄÄڴ濪֧£¬ÒòΪ³éÏóµÄ±à³Ì·½·¨ÐèÒª±àд¶îÍâµÄ´úÂ룬ËäÈ»ÕâЩ´úÂë¸ù±¾Ö´Ðв»µ½£¬µ«ÊÇÈ´Ò²ÒªÓ³Éäµ½ÄÚ´æµ±ÖУ¬²»½öÕ¼ÓÃÁ˸ü¶àµÄÄڴ棬ÔÚÖ´ÐÐЧÂÊ·½ÃæÒ²»áÓÐËù½µµÍ¡£µ±È»ÕâÀïÎÒ²¢²»ÊÇÌᳫ´ó¼ÒÍêÈ«²»Ê¹ÓóéÏó±à³Ì£¬¶øÊǽ÷É÷ʹÓóéÏó±à³Ì£¬²»ÒªÈÏΪÕâÊÇÒ»ÖֺܿáµÄ±à³Ì·½Ê½¶øÈ¥ËÁÒâʹÓÃËü£¬Ö»ÔÚÄãÈÏΪÓбØÒªµÄÇé¿öϲÅȥʹÓá£
¾¡Á¿±ÜÃâʹÓÃÒÀÀµ×¢Èë¿ò¼Ü
ÏÖÔÚÓкܶàÈ˶¼Ï²»¶ÔÚAndroid¹¤³Ìµ±ÖÐʹÓÃÒÀÀµ×¢Èë¿ò¼Ü£¬±ÈÈç˵ÏñGuice»òÕßRoboGuiceµÈ£¬ÒòΪËüÃÇ¿ÉÒÔ¼ò»¯Ò»Ð©¸´ÔӵıàÂë²Ù×÷£¬±ÈÈç¿ÉÒÔ½«ÏÂÃæµÄÒ»¶Î´úÂ룺
class AndroidWay extends Activity { TextView name; ImageView thumbnail; LocationManager loc; Drawable icon; String myName; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); name = (TextView) findViewById(R.id.name); thumbnail = (ImageView) findViewById(R.id.thumbnail); loc = (LocationManager) getSystemService(Activity.LOCATION_SERVICE); icon = getResources().getDrawable(R.drawable.icon); myName = getString(R.string.app_name); name.setText( "Hello, " + myName ); } } |
¼ò»¯³ÉÕâÑùµÄÒ»ÖÖд·¨£º
@ContentView(R.layout.main) class RoboWay extends RoboActivity { @InjectView(R.id.name) TextView name; @InjectView(R.id.thumbnail) ImageView thumbnail; @InjectResource(R.drawable.icon) Drawable icon; @InjectResource(R.string.app_name) String myName; @Inject LocationManager loc; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); name.setText( "Hello, " + myName ); } } |
¿´ÉÏȥȷʵʮ·ÖÓÕÈË£¬ÎÒÃÇÉõÖÁ¿ÉÒÔ½«findViewById()ÕâÒ»ÀàµÄ·±Ëö²Ù×÷È«²¿Ê¡È¥ÁË¡£µ«ÊÇÕâЩ¿ò¼ÜΪÁËÒªËÑѰ´úÂëÖеÄ×¢½â£¬Í¨³£¶¼ÐèÒª¾Àú½Ï³¤µÄ³õʼ»¯¹ý³Ì£¬²¢ÇÒ»¹¿ÉÄܽ«Ò»Ð©ÄãÓò»µ½µÄ¶ÔÏóÒ²Ò»²¢¼ÓÔØµ½ÄÚ´æµ±ÖС£ÕâЩÓò»µ½µÄ¶ÔÏó»áÒ»Ö±Õ¼ÓÃ×ÅÄÚ´æ¿Õ¼ä£¬¿ÉÄÜÒª¹ýºÜ¾ÃÖ®ºó²Å»áµÃµ½ÊÍ·Å£¬Ïà½Ï֮ϣ¬Ò²Ðí¶àÇü¸Ðп´ËÆ·±ËöµÄ´úÂë²ÅÊǸüºÃµÄÑ¡Ôñ¡£
ʹÓÃProGuard¼ò»¯´úÂë
ProGuardÏàÐÅ´ó¼Ò¶¼²»»áİÉú£¬ºÜ¶àÈ˶¼»áʹÓÃÕâ¸ö¹¤¾ßÀ´»ìÏý´úÂ룬µ«ÊdzýÁË»ìÏýÖ®Í⣬Ëü»¹¾ßÓÐѹËõºÍÓÅ»¯´úÂëµÄ¹¦ÄÜ¡£ProGuard»á¶ÔÎÒÃǵĴúÂë½øÐмìË÷£¬É¾³ýһЩÎÞÓõĴúÂ룬²¢ÇÒ»á¶ÔÀà¡¢×ֶΡ¢·½·¨µÈ½øÐÐÖØÃüÃû£¬ÖØÃüÃûÖ®ºóµÄÀà¡¢×ֶκͷ½·¨Ãû¶¼»á±ÈÔÀ´¼ò¶ÌºÜ¶à£¬ÕâÑùµÄ»°Ò²¾Í¶ÔÄÚ´æµÄÕ¼ÓñäµÃ¸üÉÙÁË¡£
ʹÓöà¸ö½ø³Ì
Õâ¸ö¼¼ÇÉÆäʵ²¢²»ÊǷdz£½¨ÒéʹÓ㬵«ËüȷʵÊÇÒ»ÖÖ¿ÉÒÔ°ïÖúÎÒÃǽÚÊ¡ºÍ¹ÜÀíÄÚ´æµÄ¸ß¼¶¼¼ÇÉ¡£Èç¹ûÄãҪʹÓÃËüµÄ»°Ò»¶¨Òª½÷É÷ʹÓã¬ÒòΪ¾ø´ó¶àÊýµÄÓ¦ÓóÌÐò¶¼²»Ó¦¸ÃÔÚ¶à¸ö½ø³Ìµ±ÖÐÔËÐеģ¬Ò»µ©Ê¹Óò»µ±£¬ËüÉõÖÁ»áÔö¼Ó¶îÍâµÄÄÚ´æ¶ø²»ÊǰïÎÒÃǽÚÊ¡ÄÚ´æ¡£Õâ¸ö¼¼ÇɱȽÏÊÊÓÃÓÚÄÇЩÐèÒªÔÚºǫ́ȥÍê³ÉÒ»Ïî¶ÀÁ¢µÄÈÎÎñ£¬ºÍǰ̨µÄ¹¦ÄÜÊÇ¿ÉÒÔÍêÈ«Çø·Ö¿ªµÄ³¡¾°¡£
ÕâÀï¾ÙÒ»¸ö±È½ÏÊʺÏȥʹÓÃ¶à½ø³Ì¼¼Çɵij¡¾°£¬±ÈÈç˵ÎÒÃÇÕýÔÚ×öÒ»¸öÒôÀÖ²¥·ÅÆ÷Èí¼þ£¬ÆäÖв¥·ÅÒôÀֵŦÄÜÓ¦¸ÃÊÇÒ»¸ö¶ÀÁ¢µÄ¹¦ÄÜ£¬Ëü²»ÐèÒªºÍUI·½ÃæÓÐÈκιØÏµ£¬¼´Ê¹Èí¼þÒѾ¹Ø±ÕÁËÒ²Ó¦¸Ã¿ÉÒÔÕý³£²¥·ÅÒôÀÖ¡£Èç¹û´ËʱÎÒÃÇֻʹÓÃÒ»¸ö½ø³Ì£¬ÄÇô¼´Ê¹Óû§¹Ø±ÕÁËÈí¼þ£¬ÒѾÍêÈ«ÓÉServiceÀ´¿ØÖÆÒôÀÖ²¥·ÅÁË£¬ÏµÍ³ÈÔÈ»»á½«Ðí¶àUI·½ÃæµÄÄÚ´æ½øÐб£Áô¡£ÔÚÕâÖÖ³¡¾°Ï¾ͷdz£ÊʺÏʹÓÃÁ½¸ö½ø³Ì£¬Ò»¸öÓÃÓÚUIչʾ£¬ÁíÒ»¸öÔòÓÃÓÚÔÚºǫ́³ÖÐøµØ²¥·ÅÒôÀÖ¡£
ÏëҪʵÏÖ¶à½ø³ÌµÄ¹¦ÄÜÒ²·Ç³£¼òµ¥£¬Ö»ÐèÒªÔÚAndroidManifestÎļþµÄÓ¦ÓóÌÐò×é¼þÖÐÉùÃ÷Ò»¸öandroid:processÊôÐԾͿÉÒÔÁË£¬±ÈÈç˵ÎÒÃÇÏ£Íû²¥·ÅÒôÀÖµÄService¿ÉÒÔÔËÐÐÔÚÒ»¸öµ¥¶ÀµÄ½ø³Ìµ±ÖУ¬¾Í¿ÉÒÔÕâÑùд£º
<service android:name=".PlaybackService" android:process=":background" /> |
ÕâÀïÖ¸¶¨µÄ½ø³ÌÃûÊÇbackground£¬ÄãÒ²¿ÉÒÔ½«Ëü¸Ä³ÉÈÎÒâÄãϲ»¶µÄÃû×Ö¡£ÐèҪעÒâµÄÊÇ£¬½ø³ÌÃûµÄÇ°Ãæ¶¼Ó¦¸Ã¼ÓÉÏÒ»¸öðºÅ£¬±íʾ¸Ã½ø³ÌÊÇÒ»¸öµ±Ç°Ó¦ÓóÌÐòµÄ˽Óнø³Ì¡£
×ñÑÒÔÉϵÄËùÓбà³Ì½¨Ò飬ÎÒÃǾͿÉÒÔÈÃÓ¦ÓóÌÐòÄÚ´æµÄʹÓñäµÃ¸ü¼ÓºÏÀí»¯¡£µ«ÕâÖ»ÊǵÚÒ»²½¶øÒÑ£¬ÎªÁËÒªÈóÌÐòÓµÓÐ×î¼ÑÐÔÄÜ£¬ÎÒÃÇҪѧϰµÄ¶«Î÷»¹Óкܶ࣬ÏÂÆªÎÄÕµ±Öн«»á½éÉÜÈçºÎ·ÖÎöÄÚ´æµÄʹÓÃÇé¿ö£¬¸ÐÐËȤµÄÅóÓÑÇëÃ÷Ìì¼ÌÐøÔĶÁ
Android×î¼ÑÐÔÄÜʵ¼ù(¶þ)¡ª¡ª·ÖÎöÄÚ´æµÄʹÓÃÇé¿ö ¡£
|