Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Android ÄÚ´æÓÅ»¯Êµ¼ùÓë×ܽá
 
À´Ô´ÓÚ£º¼«¿ÍÍ·Ìõ ·¢²¼ÓÚ£º 2017-4-11
  2063  次浏览      27
 

ÖÇÄÜÊÖ»ú·¢Õ¹µ½½ñÌìÒѾ­ÓÐÊ®¼¸¸öÄêÍ·£¬ÊÖ»úµÄÈíÓ²¼þ¶¼ÒѾ­·¢ÉúÁË·­Ì츲µØµÄ±ä»¯£¬ÌرðÊÇ Android ÕóÓª£¬´ÓÒ»¿ªÊ¼µÄÒ»Á½°Ù M µ½½ñÌ춯éü 4G£¬6G Äڴ档Ȼ¶ø´ó²¿·ÖµÄ¿ª·¢Õß¹Û¿´ÏÂ×Ô¼ºµÄÒì³£Éϱ¨ÏµÍ³£¬»¹ÊǻᷢÏÖ¸÷ÖÖÄÚ´æÎÊÌâÈÔÈ»²ã³ö²»Ç¸÷ÖÖ OOM Ϊ crash Âʹ±Ïײ»ÉÙ¡£Android ¿ª·¢·¢Õ¹µ½½ñÌìÒ²ÊÇÒѾ­±È½Ï³ÉÊ죬¸÷ÖÖпò¼Ü£¬Ð¼¼ÊõÒ²ÊDzã³ö²»Ç¶øÄÚ´æÓÅ»¯Ò»Ö±¶¼ÊÇ Android ¿ª·¢¹ý³ÌÒ»¸ö²»¿É±ÜÃâµÄ»°Ìâ¡£ Ç¡ºÃ×î½ü×öÁËÄÚ´æÓÅ»¯Ïà¹ØµÄ¹¤×÷£¬ÕâÀïÒ²¶Ô Android ÄÚ´æÓÅ»¯Ïà¹ØµÄ֪ʶ×öÏÂ×ܽᡣ

ÔÚ¿ªÊ¼ÎÄÕÂÖ®Ç°ÍÆ¼öϹ«Ë¾Í¬Ê·­ÒëÕûÀí°æ±¾¡¶Android ÐÔÄÜÓÅ»¯µä·¶ - µÚ 6 ¼¾¡·£¬ÒòΪƪ·ùÓÐÏÞÕâÀïÎÒ¶ÔһЩÄÚÈÝÖ»×ö¼òµ¥×ܽᣬͬʱÈç¹ûÓв»ÕýÈ·ÄÚÈÝÒ²Âé·³°ïæָÕý¡£

±¾ÎĽ«»á¶Ô Android ÄÚ´æÓÅ»¯Ïà¹ØµÄ֪ʶ½øÐÐ×ܽáÒÔ¼°×îºó°¸Àý·ÖÎö(Ò»¶þ²¿·ÖÊÇÀíÂÛ֪ʶ×ܽᣬÄãÒ²¿ÉÒÔÖ±½ÓÌøµ½µÚÈý²¿·Ö¿´°¸Àý)£º

¹¤ÓûÉÆÆäʱØÏÈÀûÆäÆ÷£¬ÏëÒªÓÅ»¯ App µÄÄÚ´æÕ¼Óã¬ÄÇô»¹ÊÇÐèÒªÏÈÁ˽â Android ϵͳµÄÄÚ´æ·ÖÅäºÍ»ØÊÕ»úÖÆ¡£

Ò»¡¢Android ÄÚ´æ·ÖÅ仨ÊÕ»úÖÆ

²Î¿¼ Android ²Ù×÷ϵͳµÄÄÚ´æ»ØÊÕ»úÖÆ[1]£¬ÕâÀï¼òµ¥×öÏÂ×ܽ᣺

´Óºê¹Û½Ç¶ÈÉÏÀ´¿´ Android ϵͳ¿ÉÒÔ·ÖΪÈý¸ö²ã´Î£º

1.Application Framework

2.Dalvik ÐéÄâ»ú

3.Linux Äںˡ£

ÕâÈý¸ö²ã´Î¶¼Óи÷×ÔÄÚ´æÏà¹Ø¹¤×÷£º

1. Application Framework

Anroid »ùÓÚ½ø³ÌÖÐÔËÐеÄ×é¼þ¼°Æä״̬¹æ¶¨ÁËĬÈϵÄÎå¸ö»ØÊÕÓÅÏȼ¶£º

1.Empty process(¿Õ½ø³Ì)

2.Background process(ºǫ́½ø³Ì)

3.Service process(·þÎñ½ø³Ì)

4.Visible process(¿É¼û½ø³Ì)

5.Foreground process(ǰ̨½ø³Ì)

ϵͳÐèÒª½øÐÐÄÚ´æ»ØÊÕʱ×îÏÈ»ØÊÕ¿Õ½ø³Ì,È»ºóÊǺǫ́½ø³Ì£¬ÒÔ´ËÀàÍÆ×îºó²Å»á»ØÊÕǰ̨½ø³Ì£¨Ò»°ãÇé¿öÏÂǰ̨½ø³Ì¾ÍÊÇÓëÓû§½»»¥µÄ½ø³ÌÁË,Èç¹ûÁ¬Ç°Ì¨½ø³Ì¶¼ÐèÒª»ØÊÕÄÇô´Ëʱϵͳ¼¸ºõ²»¿ÉÓÃÁË£©¡£

ÓÉ´ËÒ²ÑÜÉúÁËºÜ¶à½ø³Ì±£»îµÄ·½·¨£¨Ìá¸ßÓÅÏȼ¶£¬»¥Ï໽ÐÑ£¬native ±£»îµÈµÈ£©£¬³öÏÖÁ˹úÄÚ¸÷ÖÖÈ«¼ÒͰ£¬ÉõÖÁ¸÷ÖÖɱ²»ËÀµÄ½ø³Ì¡£

Android ÖÐÓÉ ActivityManagerService ¼¯ÖйÜÀíËùÓнø³ÌµÄÄÚ´æ×ÊÔ´·ÖÅä¡£

2. Linux ÄÚºË

²Î¿¼°¢Àï°Í°ÍµÄ Android ÄÚ´æÓÅ»¯·ÖÏí[2]£¬ÕâÀï×î¼òµ¥µÄÀí½â¾ÍÊÇActivityManagerService»á¶ÔËùÓнø³Ì½øÐÐÆÀ·Ö£¨´æ·ÅÔÚ±äÁ¿ adj ÖУ©£¬È»ºóÔÙ½²Õâ¸öÆÀ·Ö¸üе½Äںˣ¬ÓÉÄÚºËÈ¥Íê³ÉÕæÕýµÄÄÚ´æ»ØÊÕ(lowmemorykiller, Oom_killer)¡£ÕâÀïÖ»ÊÇ´ó¸ÅµÄÁ÷³Ì£¬Öмä¹ý³Ì»¹ÊǺܸ´Ôӵģ¬ÓÐÐËȤµÄͬѧ¿ÉÒÔÒ»ÆðÑо¿£¬´úÂëÔÚϵͳԴÂëActivityManagerService.javaÖС£

3. Dalvik ÐéÄâ»ú

Android ½ø³ÌµÄÄÚ´æ¹ÜÀí·ÖÎö[3]£¬¶Ô Android Öнø³ÌÄÚ´æµÄ¹ÜÀí×öÁË·ÖÎö¡£

Android ÖÐÓÐ Native Heap ºÍ Dalvik Heap¡£Android µÄ Native Heap ÑÔÀíÂÛÉϿɷÖÅäµÄ¿Õ¼äÈ¡¾öÁËÓ²¼þ RAM£¬¶ø¶ÔÓÚÿ¸ö½ø³ÌµÄ Dalvik Heap ¶¼ÊÇÓдóСÏÞÖÆµÄ£¬¾ßÌå²ßÂÔ¿ÉÒÔ¿´¿´ android dalvik heap dzÎö[4]¡£

Android App Ϊʲô»á OOM ÄØ£¿Æäʵ¾ÍÊÇÉêÇëµÄÄڴ泬¹ýÁË Dalvik Heap µÄ×î´óÖµ¡£ÕâÀïÒ²µ®ÉúÁËһЩ±È½Ï¡±ºÚ¿Æ¼¼¡±µÄÄÚ´æÓÅ»¯·½°¸£¬±ÈÈ罫ºÄÄÚ´æµÄ²Ù×÷·Åµ½ Native ²ã£¬»òÕßʹÓ÷ֽø³ÌµÄ·½Ê½Í»ÆÆÃ¿¸ö½ø³ÌµÄ Dalvik Heap ÄÚ´æÏÞÖÆ¡£

Android Dalvik Heap ÓëÔ­Éú Java Ò»Ñù£¬½«¶ÑµÄÄÚ´æ¿Õ¼ä·ÖΪÈý¸öÇøÓò£¬Young Generation£¬Old Generation£¬ Permanent Generation¡£

×î½ü·ÖÅäµÄ¶ÔÏó»á´æ·ÅÔÚ Young Generation ÇøÓò£¬µ±Õâ¸ö¶ÔÏóÔÚÕâ¸öÇøÓòÍ£ÁôµÄʱ¼ä´ïµ½Ò»¶¨³Ì¶È£¬Ëü»á±»Òƶ¯µ½ Old Generation£¬×îºóÀÛ»ýÒ»¶¨Ê±¼äÔÙÒÆ¶¯µ½ Permanent Generation ÇøÓò¡£ÏµÍ³»á¸ù¾ÝÄÚ´æÖв»Í¬µÄÄÚ´æÊý¾ÝÀàÐÍ·Ö±ðÖ´Ðв»Í¬µÄ gc ²Ù×÷¡£

GC ·¢ÉúµÄʱºò£¬ËùÓеÄÏ̶߳¼ÊǻᱻÔÝÍ£µÄ¡£Ö´ÐÐ GC ËùÕ¼ÓõÄʱ¼äºÍËü·¢ÉúÔÚÄÄÒ»¸ö Generation Ò²ÓйØÏµ£¬Young Generation ÖеÄÿ´Î GC ²Ù×÷ʱ¼äÊÇ×î¶ÌµÄ£¬Old Generation Æä´Î£¬Permanent Generation ×¡£

GC ʱ»áµ¼ÖÂÏß³ÌÔÝÍ££¬µ¼Ö¿¨¶Ù£¬Google ÔÚа汾µÄ Android ÖÐÓÅ»¯ÁËÕâ¸öÎÊÌ⣬ ÔÚ ART ÖÐ¶Ô GC ¹ý³Ì×öÁËÓÅ»¯½ÒÃØ ART ϸ½Ú ¡ª¡ª Garbage collection[5]£¬¾Ý˵ÄÚ´æ·ÖÅäµÄЧÂÊÌá¸ßÁË 10 ±¶£¬GC µÄЧÂÊÌá¸ßÁË 2-3 ±¶£¨¿É¼ûÔ­À´Ð§ÂÊÓжàµÍ£©£¬²»¹ýÖ÷Òª»¹ÊÇÓÅ»¯ÖжϺÍ×èÈûµÄʱ¼ä£¬Æµ·±µÄ GC »¹ÊǻᵼÖ¿¨¶Ù¡£

ÉÏÃæ¾ÍÊÇ Android ϵͳÄÚ´æ·ÖÅäºÍ»ØÊÕÏà¹ØÖªÊ¶£¬»Ø¹ýÍ·À´¿´£¬ÏÖÔÚ¸÷ÖÖÊÖ»ú³§É̹ĴµÈ˹¤ÖÇÄÜÊÖ»ú£¬ºÅ³Æ 18 ¸öÔ²»¿¨¶Ù£¬Ô½ÓÃÔ½¿ì£¬ÆäʵºÜ´óÒ»²¿·Ö Android ϵͳµÄÄÚ´æÓÅ»¯Óйأ¬Î޷ǾÍÊÇÀûÓÃһЩ±È½Ï³ÉÊìµÄ»ùÓÚͳ¼Æ£¬»úÆ÷ѧϰµÄËã·¨¶¨Ê±ÇåÀíÊý¾Ý£¬ÇåÀíÄڴ棬ÉõÖÁÌáǰ¼ÓÔØÊý¾Ýµ½ÄÚ´æ¡£

¶þ¡¢Android ³£¼ûÄÚ´æÎÊÌâºÍ¶ÔÓ¦¼ì²â£¬½â¾ö·½Ê½

1. ÄÚ´æÐ¹Â¶

²»Ö¹ Android ³ÌÐòÔ±£¬ÄÚ´æÐ¹Â¶Ó¦¸ÃÊǴ󲿷ֳÌÐòÔ±¶¼Óöµ½¹ýµÄÎÊÌ⣬¿ÉÒÔ˵´ó²¿·ÖµÄÄÚ´æÎÊÌâ¶¼ÊÇÄÚ´æÐ¹Â¶µ¼Öµģ¬Android ÀïÒ²ÓÐһЩºÜ³£¼ûµÄÄÚ´æÐ¹Â¶ÎÊÌâ[6]£¬ÕâÀï¼òµ¥ÂÞÁÐÏ£º

µ¥Àý£¨Ö÷ÒªÔ­Òò»¹ÊÇÒòΪһ°ãÇé¿öϵ¥Àý¶¼ÊÇÈ«¾ÖµÄ£¬ÓÐʱºò»áÒýÓÃһЩʵ¼ÊÉúÃüÖÜÆÚ±È½Ï¶ÌµÄ±äÁ¿£¬µ¼ÖÂÆäÎÞ·¨ÊÍ·Å£©

¾²Ì¬±äÁ¿£¨Í¬ÑùÒ²ÊÇÒòΪÉúÃüÖÜÆÚ±È½Ï³¤£©

Handler ÄÚ´æÐ¹Â¶[7]

ÄäÃûÄÚ²¿ÀࣨÄäÃûÄÚ²¿Àà»áÒýÓÃÍⲿÀ࣬µ¼ÖÂÎÞ·¨ÊÍ·Å£¬±ÈÈç¸÷Öֻص÷£©

×ÊԴʹÓÃÍêδ¹Ø±Õ£¨BraodcastReceiver£¬ContentObserver£¬File£¬Cursor£¬Stream£¬Bitmap£©

¶Ô Android ÄÚ´æÐ¹Â¶Òµ½çÒѾ­ÓкܶàÓÅÐãµÄ×é¼þÆäÖÐ LeakCanary ×îΪ֪Ãû(Square ³öÆ·£¬Square ¿Éν Android ¿ªÔ´½çÖеÄÒµ½çÁ¼ÐÄ£¬¿ªÔ´µÄÏîÄ¿°üÀ¨ okhttp, retrofit£¬otto, picasso, Android ¿ª·¢´óÉñ Jake Wharton ¾ÍÔÚ Square)£¬ÆäÔ­ÀíÊÇ¼à¿ØÃ¿¸ö activity£¬ÔÚ activity ondestory ºó£¬ÔÚºǫ́Ï̼߳ì²âÒýÓã¬È»ºó¹ýÒ»¶Îʱ¼ä½øÐÐ gc£¬gc ºóÈç¹ûÒýÓû¹ÔÚ£¬ÄÇô dump ³öÄÚ´æ¶ÑÕ»£¬²¢½âÎö½øÐпÉÊÓ»¯ÏÔʾ¡£Ê¹Óà LeakCanary ¿ÉÒÔ¿ìËٵؼì²â³ö Android ÖеÄÄÚ´æÐ¹Â¶¡£

Õý³£Çé¿öÏ£¬½â¾ö´ó²¿·ÖÄÚ´æÐ¹Â¶ÎÊÌâºó£¬App Îȶ¨ÐÔÓ¦¸Ã»áÓкܴóÌáÉý£¬µ«ÊÇÓÐʱºò App ±¾Éí¾ÍÊÇÓÐһЩ±È½ÏºÄÄÚ´æµÄ¹¦ÄÜ£¬±ÈÈçÖ±²¥£¬ÊÓÆµ²¥·Å£¬ÒôÀÖ²¥·Å£¬ÄÇôÎÒÃÇ»¹ÓÐʲôÄÜ×öµÄ¿ÉÒÔ½µµÍÄÚ´æÊ¹Ó㬼õÉÙ OOM ÄØ£¿

2. ͼƬ·Ö±æÂÊÏà¹Ø

·Ö±æÂÊÊÊÅäÎÊÌâ¡£ºÜ¶àÇé¿öÏÂͼƬËùÕ¼µÄÄÚ´æÔÚÕû¸ö App ÄÚ´æÕ¼ÓÃÖлáÕ¼´ó²¿·Ö¡£ÎÒÃÇÖªµÀ¿ÉÒÔͨ¹ý½«Í¼Æ¬·Åµ½ hdpi/xhdpi/xxhdpi µÈ²»Í¬Îļþ¼Ð½øÐÐÊÊÅ䣬ͨ¹ý xml android:background ÉèÖñ³¾°Í¼Æ¬£¬»òÕßͨ¹ý BitmapFactory.decodeResource()·½·¨£¬Í¼Æ¬Êµ¼ÊÉÏĬÈÏÇé¿öÏÂÊÇ»á½øÐÐËõ·ÅµÄ¡£ÔÚ Java ²ãʵ¼Êµ÷Óõĺ¯Êý¶¼ÊÇ»òÕßͨ¹ý BitmapFactory ÀïµÄ decodeResourceStream º¯Êý

public static Bitmap decodeResourceStream(Resources res, TypedValue value,

InputStream is, Rect pad, Options opts) {

if (opts == null) {

opts = new Options();

}

if (opts.inDensity == 0 && value != null) {

final int density = value.density;

if (density == TypedValue.DENSITY_DEFAULT) {

opts.inDensity = DisplayMetrics.DENSITY_DEFAULT;

} else if (density != TypedValue.DENSITY_NONE) {

opts.inDensity = density;

}

}

if (opts.inTargetDensity == 0 && res != null) {

opts.inTargetDensity = res.getDisplayMetrics().densityDpi;

}

return decodeStream(is, pad, opts);

}

decodeResource ÔÚ½âÎöʱ»á¶Ô Bitmap ¸ù¾Ýµ±Ç°É豸ÆÁÄ»ÏñËØÃÜ¶È densityDpi µÄÖµ½øÐÐËõ·ÅÊÊÅä²Ù×÷£¬Ê¹µÃ½âÎö³öÀ´µÄ Bitmap Ó뵱ǰÉ豸µÄ·Ö±æÂÊÆ¥Å䣬´ïµ½Ò»¸ö×î¼ÑµÄÏÔʾЧ¹û£¬²¢ÇÒ Bitmap µÄ´óС½«±ÈԭʼµÄ´ó£¬¿ÉÒԲο¼ÏÂÌÚѶ Bugly µÄÏêϸ·ÖÎö Android ¿ª·¢ÈƲ»¹ýµÄ¿Ó£ºÄãµÄ Bitmap ¾¿¾¹Õ¼¶à´óÄڴ棿¡£

¹ØÓÚ Density¡¢·Ö±æÂÊ¡¢-hdpi µÈ res Ŀ¼֮¼äµÄ¹ØÏµ£º

¾Ù¸öÀý×Ó£¬¶ÔÓÚÒ»ÕÅ 1280¡Á720 µÄͼƬ£¬Èç¹û·ÅÔÚ xhdpi£¬ÄÇô xhdpi µÄÉ豸Äõ½µÄ´óС»¹ÊÇ 1280¡Á720 ¶ø xxhpi µÄÉ豸Äõ½µÄ¿ÉÄÜÊÇ 1920¡Á1080£¬ÕâÁ½ÖÖÇé¿öÔÚÄÚ´æÀïµÄ´óС·Ö±ðΪ£º3.68M ºÍ 8.29M£¬Ïà²î 4.61M£¬ÔÚÒÆ¶¯É豸À´ËµÕ⼸ M µÄ²î¾à»¹ÊǺܴóµÄ¡£

¾¡¹ÜÏÖÔÚÒѾ­ÓбȽÏÏȽøµÄͼƬ¼ÓÔØ×é¼þÀàËÆ Glide£¬Facebook Freso, »òÕßÀÏÅÆ Universal-Image-Loader£¬µ«ÊÇÓÐʱ¾ÍÊÇÐèÒªÊÖ¶¯Äõ½Ò»¸ö bitmap »òÕß drawable£¬ÌرðÊÇÔÚһЩ¿ÉÄÜ»áÆµ·±µ÷Óõij¡¾°(±ÈÈç ListView µÄ getView)£¬ÔõÑù¾¡¿ÉÄÜ¶Ô bitmap ½øÐи´ÓÃÄØ£¿ÕâÀïÊ×ÏÈÐèÒªÃ÷È·µÄÊǶÔͬÑùµÄͼƬ£¬Òª ¾¡¿ÉÄܸ´Óã¬ÎÒÃÇ¿ÉÒÔ¼òµ¥×Ô¼ºÓà WeakReference ×öÒ»¸ö bitmap »º´æ³Ø£¬Ò²¿ÉÒÔÓÃÀàËÆÍ¼Æ¬¼ÓÔØ¿âдһ¸öͨÓÃµÄ bitmap »º´æ³Ø£¬¿ÉÒԲο¼ GlideBitmapPool[8]µÄʵÏÖ¡£

ÎÒÃÇÒ²À´¿´¿´ÏµÍ³ÊÇÔõô×öµÄ£¬¶ÔÓÚÀàËÆÔÚ xml ÀïÃæÖ±½Óͨ¹ý android:background »òÕß android:src ÉèÖõı³¾°Í¼Æ¬£¬ÒÔ ImageView ΪÀý£¬×îÖÕ»áµ÷Óà Resource.java ÀïµÄ loadDrawable:

Drawable loadDrawable(TypedValue value, int id, Theme theme) throws NotFoundException {

// Next, check preloaded drawables. These may contain unresolved theme

// attributes.

final ConstantState cs;

if (isColorDrawable) {

cs = sPreloadedColorDrawables.get(key);

} else {

cs = sPreloadedDrawables[mConfiguration.getLayoutDirection()].get(key);

}

Drawable dr;

if (cs != null) {

dr = cs.newDrawable(this);

} else if (isColorDrawable) {

dr = new ColorDrawable(value.data);

} else {

dr = loadDrawableForCookie(value, id, null);

}

...

return dr;

}

¿ÉÒÔ¿´µ½Êµ¼ÊÉÏϵͳҲÊÇÓÐÒ»·ÝÈ«¾ÖµÄ»º´æ£¬sPreloadedDrawables, ¶ÔÓÚ²»Í¬µÄ drawable£¬Èç¹ûͼƬʱһÑùµÄ£¬ÄÇô×îÖÕÖ»»áÓÐÒ»·Ý bitmap(ÏíԪģʽ)£¬´æ·ÅÓÚ BitmapState ÖУ¬»ñÈ¡ drawable ʱ£¬ÏµÍ³»á´Ó»º´æÖÐÈ¡³öÕâ¸ö bitmap È»ºó¹¹Ôì drawable¡£¶øÍ¨¹ý BitmapFactory.decodeResource()Ôòÿ´Î¶¼»áÖØÐ½âÂë·µ»Ø bitmap¡£ËùÒÔÆäʵÎÒÃÇ¿ÉÒÔͨ¹ý context.getResources().getDrawable ÔÙ´Ó drawable Àï»ñÈ¡ bitmap£¬´Ó¶ø¸´Óà bitmap£¬È»¶øÕâÀïÒ²ÓÐһЩ¿Ó£¬±ÈÈçÎÒÃÇ»ñÈ¡µ½µÄÕâ·Ý bitmap£¬¼ÙÈçÎÒÃÇÖ´ÐÐÁË recycle Ö®ÀàµÄ²Ù×÷£¬µ«ÊǼÙÈçÔÚÆäËûµØ·½ÔÙʹÓÃËüÊÇÄÇô¾Í»áÓС±Canvas: trying to use a recycled bitmap android.graphics.Bitmap¡±Òì³£¡£

3. ͼƬѹËõ

BitmapFactory ÔÚ½âÂëͼƬʱ£¬¿ÉÒÔ´øÒ»¸ö Options£¬ÓÐһЩ±È½ÏÓÐÓõŦÄÜ£¬±ÈÈ磺

inTargetDensity ±íʾҪ±»»­³öÀ´Ê±µÄÄ¿±êÏñËØÃܶÈ

inSampleSize Õâ¸öÖµÊÇÒ»¸ö int£¬µ±ËüСÓÚ 1 µÄʱºò£¬½«»á±»µ±×ö 1 ´¦Àí£¬Èç¹û´óÓÚ 1£¬ÄÇô¾Í»á°´ÕÕ±ÈÀý£¨1 / inSampleSize£©ËõС bitmap µÄ¿íºÍ¸ß¡¢½µµÍ·Ö±æÂÊ£¬´óÓÚ 1 ʱÕâ¸öÖµ½«»á±»´¦ÖÃΪ 2 µÄ±¶Êý¡£ÀýÈ磬width=100£¬height=100£¬inSampleSize=2£¬ÄÇô¾Í»á½« bitmap ´¦ÀíΪ£¬width=50£¬height=50£¬¿í¸ß½µÎª 1 / 2£¬ÏñËØÊý½µÎª 1 / 4

inJustDecodeBounds ×ÖÃæÒâ˼¾Í¿ÉÒÔÀí½â¾ÍÊÇÖ»½âÎöͼƬµÄ±ß½ç£¬ÓÐʱÈç¹ûÖ»ÊÇΪÁË»ñȡͼƬµÄ´óС¾Í¿ÉÒÔÓÃÕâ¸ö£¬¶ø²»±ØÖ±½Ó¼ÓÔØÕûÕÅͼƬ¡£

inPreferredConfig ĬÈÏ»áʹÓà ARGB_8888,ÔÚÕâ¸öģʽÏÂÒ»¸öÏñËØµã½«»áÕ¼Óà 4 ¸ö byte,¶ø¶ÔһЩûÓÐ͸Ã÷¶ÈÒªÇó»òÕßͼƬÖÊÁ¿ÒªÇ󲻸ߵÄͼƬ£¬¿ÉÒÔʹÓà RGB_565£¬Ò»¸öÏñËØÖ»»áÕ¼Óà 2 ¸ö byte£¬Ò»Ï¿ÉÒÔʡϠ50%ÄÚ´æ¡£

inPurgeableºÍinInputShareable ÕâÁ½¸öÐèÒªÒ»ÆðʹÓã¬BitmapFactory.java µÄÔ´ÂëÀïÃæÓÐ×¢ÊÍ£¬´óÖÂÒâ˼ÊDZíʾÔÚϵͳÄÚ´æ²»×ãʱÊÇ·ñ¿ÉÒÔ»ØÊÕÕâ¸ö bitmap£¬ÓеãÀàËÆÈíÒýÓ㬵«ÊÇʵ¼ÊÔÚ 5.0 ÒÔºóÕâÁ½¸öÊôÐÔÒѾ­±»ºöÂÔ£¬ÒòΪϵͳÈÏΪ»ØÊÕºóÔÙ½âÂëʵ¼Ê»á·´¶ø¿ÉÄܵ¼ÖÂÐÔÄÜÎÊÌâ

inBitmap ¹Ù·½ÍƼöʹÓõIJÎÊý£¬±íÊ¾ÖØ¸´ÀûÓÃͼƬÄڴ棬¼õÉÙÄÚ´æ·ÖÅ䣬ÔÚ 4.4 ÒÔǰֻÓÐÏàͬ´óСµÄͼƬÄÚ´æÇøÓò¿ÉÒÔ¸´Óã¬4.4 ÒÔºóÖ»ÒªÔ­ÓеÄͼƬ±È½«Òª½âÂëµÄͼƬ´ó¼È¿ÉÒÔ¸´ÓÃÁË¡£

4. »º´æ³Ø´óС

ÏÖÔںܶàͼƬ¼ÓÔØ×é¼þ¶¼²»½ö½öÊÇʹÓÃÈíÒýÓûòÕßÈõÒýÓÃÁË£¬Êµ¼ÊÉÏÀàËÆ Glide ĬÈÏʹÓõÄÊ LruCache£¬ÒòΪÈíÒýÓà ÈõÒýÓö¼±È½ÏÄÑÒÔ¿ØÖÆ£¬Ê¹Óà LruCache ¿ÉÒÔʵÏֱȽϾ«Ï¸µÄ¿ØÖÆ£¬¶øÄ¬ÈÏ»º´æ³ØÉèÖÃÌ«´óÁ˻ᵼÖÂÀË·ÑÄڴ棬ÉèÖÃСÁËÓֻᵼÖÂͼƬ¾­³£±»»ØÊÕ£¬ËùÒÔÐèÒª¸ù¾Ýÿ¸ö App µÄÇé¿ö£¬ÒÔ¼°É豸µÄ·Ö±æÂÊ£¬ÄÚ´æ¼ÆËã³öÒ»¸ö±È½ÏºÏÀíµÄ³õʼֵ£¬¿ÉÒԲο¼ Glide µÄ×ö·¨¡£

5. ÄÚ´æ¶¶¶¯

ʲôÊÇÄÚ´æ¶¶¶¯ÄØ£¿Android ÀïÄÚ´æ¶¶¶¯ÊÇÖ¸ÄÚ´æÆµ·±µØ·ÖÅäºÍ»ØÊÕ£¬¶øÆµ·±µÄ gc »áµ¼Ö¿¨¶Ù£¬ÑÏÖØÊ±»¹»áµ¼Ö OOM¡£

Ò»¸öºÜ¾­µäµÄ°¸ÀýÊÇ string Æ´½Ó´´½¨´óÁ¿Ð¡µÄ¶ÔÏó(±ÈÈçÔÚһЩƵ·±µ÷Óõĵط½´ò×Ö·û´®Æ´½ÓµÄ log µÄʱºò), ¼û Android ÓÅ»¯Ö® String ƪ[9]¡£

¶øÄÚ´æ¶¶¶¯ÎªÊ²Ã´»áÒýÆð OOM ÄØ£¿

Ö÷ÒªÔ­Òò»¹ÊÇÓÐÒòΪ´óÁ¿Ð¡µÄ¶ÔÏ󯵷±´´½¨£¬µ¼ÖÂÄÚ´æË鯬£¬´Ó¶øµ±ÐèÒª·ÖÅäÄÚ´æÊ±£¬ËäÈ»×ÜÌåÉÏ»¹ÊÇÓÐÊ£ÓàÄÚ´æ¿É·ÖÅ䣬¶øÓÉÓÚÕâЩÄÚ´æ²»Á¬Ðø£¬µ¼ÖÂÎÞ·¨·ÖÅ䣬ϵͳֱ½Ó¾Í·µ»Ø OOM ÁË¡£

±ÈÈçÎÒÃÇ×øµØÌúµÄʱºò£¬¼ÙÉèÄãû´ø¹«½»¿¨È¥×øµØÌú£¬µØÌúµÄÊÛÆ±»ú¾ÍÖ»Ö§³Ö 5 Ôª£¬10 Ôª£¬¶øÄÄÅÂÄãÕâ¸öʱºòÉíÉÏÓÐ 1 ÍòÕÅ 1 ¿éµÄ¶¼Ã»ÓÃ(ÊDz»ÊǾõµÃºÜ·´ÈËÀà..)¡£µ±È»Äã¿ÉÒÔÈ¥¶Ò»» 5 Ôª£¬10 Ôª£¬¶øÔÚ Android ϵͳÀï¾ÍûÄÇôÐÒÔËÁË£¬ÏµÍ³»áÖ±½Ó¾Ü¾øÎªÄã·ÖÅäÄڴ棬²¢ÈÓÒ»¸ö OOM ¸øÄã(ÓÐÈË˵ Android ϵͳ²¢²»»á¶Ô Heap ÖпÕÏÐÄÚ´æÇøÓò×öË鯬ÕûÀí£¬´ýÑéÖ¤)¡£

ÆäËû

³£ÓÃÊý¾Ý½á¹¹ÓÅ»¯£¬ArrayMap ¼° SparseArray ÊÇ android µÄϵͳ API£¬ÊÇרÃÅÎªÒÆ¶¯É豸¶ø¶¨ÖƵġ£ÓÃÓÚÔÚÒ»¶¨Çé¿öÏÂÈ¡´ú HashMap ¶ø´ïµ½½ÚÊ¡ÄÚ´æµÄÄ¿µÄ,¾ßÌåÐÔÄܼû HashMap£¬ArrayMap£¬SparseArray Ô´Âë·ÖÎö¼°ÐÔÄܶԱÈ[10]£¬¶ÔÓÚ key Ϊ int µÄ HashMap ¾¡Á¿Ê¹Óà SparceArray Ìæ´ú£¬´ó¸Å¿ÉÒÔÊ¡ 30%µÄÄڴ棬¶ø¶ÔÓÚÆäËûÀàÐÍ£¬ArrayMap ¶ÔÄÚ´æµÄ½Úʡʵ¼Ê²¢²»Ã÷ÏÔ£¬10%×óÓÒ£¬µ«ÊÇÊý¾ÝÁ¿ÔÚ 1000 ÒÔÉÏʱ£¬²éÕÒËÙ¶È¿ÉÄÜ»á±äÂý¡£

ö¾Ù£¬Android ƽ̨ÉÏö¾ÙÊDZȽÏÕùÒéµÄ£¬ÔÚ½ÏÔçµÄ Android °æ±¾£¬Ê¹ÓÃö¾Ù»áµ¼Ö°ü¹ý´ó£¬ÔÚ¸öÀý×ÓÀïÃæ£¬Ê¹ÓÃö¾ÙÉõÖÁ±ÈÖ±½ÓʹÓà int °üµÄ size ´óÁË 10 ¶à±¶ ÔÚ stackoverflow ÉÏÒ²ÓкܶàµÄÌÖÂÛ, ´óÖÂÒâ˼ÊÇËæ×ÅÐéÄâ»úµÄÓÅ»¯£¬Ä¿Ç°Ã¶¾Ù±äÁ¿ÔÚ Android ƽ̨ÐÔÄÜÎÊÌâÒѾ­²»´ó£¬¶øÄ¿Ç° Android ¹Ù·½½¨Ò飬ʹÓÃö¾Ù±äÁ¿»¹ÊÇÐèÒª½÷É÷£¬ÒòΪö¾Ù±äÁ¿¿ÉÄܱÈÖ±½ÓÓà int ¶àʹÓà 2 ±¶µÄÄÚ´æ¡£

ListView ¸´Óã¬Õâ¸ö´ó¼Ò¶¼ÖªµÀ£¬getView ÀᄀÁ¿¸´Óà conertView,ͬʱÒòΪ getView »áƵ·±µ÷Óã¬Òª±ÜÃâÆµ·±µØÉú³É¶ÔÏó

½÷É÷ʹÓÃ¶à½ø³Ì£¬ÏÖÔںܶà App ¶¼²»Êǵ¥½ø³Ì£¬ÎªÁ˱£»î£¬»òÕßÌá¸ßÎȶ¨ÐÔ¶¼»á½øÐÐһЩ½ø³Ì²ð·Ö£¬¶øÊµ¼ÊÉϼ´Ê¹Êǿսø³ÌÒ²»áÕ¼ÓÃÄÚ´æ(1M ×óÓÒ)£¬¶ÔÓÚʹÓÃÍêµÄ½ø³Ì£¬·þÎñ¶¼Òª¼°Ê±½øÐлØÊÕ¡£

¾¡Á¿Ê¹ÓÃϵͳ×ÊÔ´£¬ÏµÍ³×é¼þ£¬Í¼Æ¬ÉõÖÁ¿Ø¼þµÄ id

¼õÉÙ view µÄ²ã¼¶£¬¶ÔÓÚ¿ÉÒÔ ÑÓ³Ù³õʼ»¯µÄÒ³Ãæ£¬Ê¹Óà viewstub

Êý¾ÝÏà¹Ø£ºÐòÁл¯Êý¾ÝʹÓà protobuf ¿ÉÒÔ±È xml Ê¡ 30%Äڴ棬É÷Óà shareprefercnce£¬ÒòΪ¶ÔÓÚͬһ¸ö sp£¬»á½«Õû¸ö xml ÎļþÔØÈëÄڴ棬ÓÐʱºòΪÁ˶ÁÒ»¸öÅäÖ㬾ͻὫ¼¸°Ù k µÄÊý¾Ý¶Á½øÄڴ棬Êý¾Ý¿â×ֶξ¡Á¿¾«¼ò£¬Ö»¶ÁÈ¡ËùÐè×ֶΡ£

dex ÓÅ»¯£¬´úÂëÓÅ»¯£¬½÷É÷ʹÓÃÍⲿ¿â£¬ ÓÐÈ˾õµÃ´úÂë¶àÉÙÓÚÄÚ´æÃ»ÓйØÏµ£¬Êµ¼Ê»áÓÐÄÇôµã¹ØÏµ£¬ÏÖÔÚÉÔ΢´óÒ»µãµÄÏîÄ¿¶¯éü¾ÍÊǰÙÍòÐдúÂëÒÔÉÏ£¬¶à dex Ò²Êdz£Ì¬£¬²»½öÕ¼Óà rom ¿Õ¼ä£¬Êµ¼ÊÉÏÔËÐеÄʱºòÐèÒª¼ÓÔØ dex Ò²ÊÇ»áÕ¼ÓÃÄÚ´æµÄ(¼¸ M)£¬ÓÐʱºòΪÁËʹÓÃһЩ¿âÀïµÄij¸ö¹¦Äܺ¯Êý¾ÍÒýÈëÁËÕû¸öÅÓ´óµÄ¿â£¬´Ëʱ¿ÉÒÔ¿¼ÂdzéÈ¡±ØÒª²¿·Ö£¬¿ªÆô proguard ÓÅ»¯´úÂ룬ʹÓà Facebook redex ʹÓÃÓÅ»¯ dex(ºÃÏñÓв»ÉÙ¿Ó)¡£

Èý¡¢°¸Àý

JOOX ÊÇ IBG Ò»¸öºËÐIJúÆ·£¬2014 Äê·¢²¼ÒÔÀ´ÒѾ­³ÉΪ 5 ¸ö¹ú¼ÒºÍµØÇøÅÅÃûµÚÒ»µÄÒôÀÖ App¡£¶«ÄÏÑÇÊÇ JOOX µÄÖ÷Òª·¢ÐеØÇø£¬Êµ¼ÊÉÏÕâЩµØÇø»¹ÊÇÓкܶàµÄµÍ¶Ë»úÐÍ£¬¶Ô App µÄ½øÐÐÄÚ´æÓÅ»¯ÊÆÔÚ±ØÐС£

ÉÏÃæ½éÉÜÁË Android ϵͳÄÚ´æ·ÖÅäºÍ»ØÊÕ»úÖÆ£¬Í¬Ê±Ò²ÁоÙÁ˳£¼ûµÄÄÚ´æÎÊÌ⣬µ«Êǵ±ÎÒÃǽӵ½Ò»¸öÄÚ´æÓÅ»¯µÄÈÎÎñʱ£¬ÎÒÃÇÓ¦¸Ã´ÓºÎ¿ªÊ¼£¿ÏÂÃæÊÇÒ»´ÎÄÚ´æÓÅ»¯µÄ·ÖÏí¡£

1. Ê×ÏÈÊǽâ¾ö´ó²¿·ÖÄÚ´æÐ¹Â¶¡£

²»¹ÜĿǰ App ÄÚ´æÕ¼ÓÃÔõÑù£¬ÀíÂÛÉϲ»ÐèÒªµÄ¶«Î÷×îºÃ»ØÊÕ£¬±ÜÃâÀË·ÑÓû§Äڴ棬¼õÉÙ OOM¡£Êµ¼ÊÉÏ×Ô JOOX ½ÓÈë LeakCanary ºó£¬Ã¿¸ö°æ±¾¶¼»á×öÄÚ´æÐ¹Â¶¼ì²â£¬¾­¹ý¼¸¸ö°æ±¾µÄµü´ú£¬JOOX ÒѾ­ÐÞ¸´Á˼¸Ê®´¦ÄÚ´æÐ¹Â¶¡£

2. ͨ¹ý MAT ²é¿´ÄÚ´æÕ¼Óã¬ÓÅ»¯Õ¼ÓÃÄÚ´æ½Ï´óµÄµØ·½¡£

JOOX ÐÞ¸´ÁËһϵÁÐÄÚ´æÐ¹Â¶ºó£¬ÄÚ´æÕ¼Óû¹ÊǾӸ߲»Ï£¬Ö»ÄÜͨ¹ý MAT ²é¿´µ½µ×ÊÇÄÄÀïÕ¼ÓÃÁËÄÚ´æ¡£¹ØÓÚ MAT µÄʹÓã¬ÍøÉϽ̳ÌÎÞÊý£¬¼òµ¥ÍƼöÁ½Æª MAT ʹÓý̳Ì[11]£¬MAT - Memory Analyzer Tool ʹÓýø½×[12]¡£

µã»÷ Android Studio ÕâÀï¿ÉÒÔ dump µ±Ç°µÄÄÚ´æ¿ìÕÕ£¬ÒòΪֱ½Óͨ¹ý Android Sutdio dump ³öÀ´µÄ hprof ÎļþÓë±ê×¼ hprof ÎļþÓÐЩ²îÒ죬ÎÒÃÇÐèÒªÊÖ¶¯½øÐÐת»»£¬ÀûÓà sdk Ŀ¼/platform-tools/hprof-conv.exe ¿ÉÒÔÖ±½Ó½øÐÐת»»£¬Ó÷¨£ºhprof-conv Ô­Îļþ.hprof ÐÂÎļþ.hprof¡£Ö»ÐèÒªÊäÈëÔ­ÎļþÃû»¹ÓÐÄ¿±êÎļþÃû¾Í¿ÉÒÔ½øÐÐת»»£¬×ª»»Íê¾Í¿ÉÒÔÖ±½ÓÓà MAT ´ò¿ª¡£

ÏÂÃæ¾ÍÊÇ JOOX ´ò¿ª App£¬ÊÖ¶¯½øÐжà´Î gc µÄ hprof Îļþ¡£

ÕâÀïÎÒÃÇ¿´µÄÊÇ Dominator Tree£¨¼´ÄÚ´æÀïÕ¼ÓÃÄÚ´æ×î¶àµÄ¶ÔÏóÁÐ±í£©¡£

Shallo Heap£º¶ÔÏó±¾ÉíÕ¼ÓÃÄÚ´æµÄ´óС£¬²»°üº¬ÆäÒýÓõĶÔÏóÄÚ´æ¡£

Retained Heap£º Retained heap ÖµµÄ¼ÆË㷽ʽÊǽ« retained set ÖеÄËùÓжÔÏó´óСµþ¼Ó¡£»òÕß˵£¬ÓÉÓÚ X ±»ÊÍ·Å£¬µ¼ÖÂÆäËüËùÓб»ÊͷŶÔÏ󣨰üÀ¨±»µÝ¹éÊͷŵģ©ËùÕ¼µÄ heap ´óС¡£

µÚÒ»ÑÛ¿´È¥ ¾ÓÈ»ÓÐ 3 ¸ö 8M µÄ¶ÔÏ󣬼ӯðÀ´¾ÍÊÇ 24M °¡ Õâµ½µ×ÊÇʲô¹í£¿

ÎÒÃÇͨ¹ý List objects->with incoming references ²é¿´£¨ÕâÀï with incoming references ±íʾ²é¿´Ë­ÒýÓÃÁËÕâ¸ö¶ÔÏó£¬with outgoing references ±íʾÕâ¸ö¶ÔÏóÒýÓÃÁËË­£©

ͨ¹ýÕâ¸ö·½Ê½ÎÒÃÇ¿´µ½ÕâÈýÕÅͼ·Ö±ðÊÇÉÁÆÁ£¬App Ö÷±³¾°£¬App ³éÌë±³¾°¡£

ÕâÀïÆäʵÓÐÁ½¸öÎÊÌâ:

Õ⼸ÕÅͼԭͼʵ¼Ê¶¼ÊÇ 1280x720,¶øÔÚ 1080p ÊÖ»úÉÏʵ²âÕ⼸ÕÅͼ¶¼Ëõ·Åµ½ÁË 1920x1080

ÉÁÆÁÒ³Ãæ£¬ÆäʵÕâÕÅͼÔÚÉÁÆÁÏÔʾ¹ýºóÓ¦¸Ã¿ÉÒÔ»ØÊÕ£¬µ«ÊÇÒòΪÀúÊ·Ô­Òò£¨ºÍ JOOX µÄÍ˳ö»úÖÆÓйأ©£¬ÕâÕÅͼ±»³£×¤ÔÚºǫ́£¬µ¼ÖÂÎÞνµÄÄÚ´æÕ¼Óá£

ÓÅ»¯·½Ê½£ºÎÒÃÇͨ¹ý½«ÕâÈýÕÅͼ´Ó xhdpi Ų¶¯µ½ xxhdpi(µ±È»ÕâÀïÐèÒª¿´ÏÂͼƬÏÔʾЧ¹ûÓÐûºÜ´óµÄÓ°Ïì)£¬ÒÔ¼°ÔÚÉÁÆÁÏÔʾ¹ýºó»ØÊÕÉÁÆÁͼƬ¡£

ÓÅ»¯½á¹û£º

´ÓÔ­À´µÄ 8.29x3=24.87M µ½ 3.68x2=7.36M ÓÅ»¯ÁË 17M(ÓÐûһÖÖÍòÂí±¼Ìڵĸоõ¡£¡£¿ÉÄÜÓÐʱ·Ñ´óÁ¦ÆøÓÅ»¯ºÜ¶à´úÂëÒ²ÓÅ»¯²»Á˼¸°Ù K£¬ËùÒԺܶàÇé¿öÏÂÄÚ´æÓÅ»¯Ê±ÓÅ»¯Í¼Æ¬»¹ÊDZȽÏÁ¢¸Í¼ûÓ°µÄ£©¡£

ͬÑù·½Ê½ÎÒÃÇ·¢ÏÖ¶ÔÓÚһЩĬÈÏͼ£¬Êµ¼ÊÒªÇóµÄÏÔʾҪÇó²¢²»¸ß£¨Í¼Æ¬Ïà¶Ô¼òµ¥£¬Í¬Ê±´ó²¿·ÖÇé¿öÏÂͼƬ¼ÓÔØ»á³É¹¦£©,±ÈÈçÏÂÃæÕâÕÅ banner µÄ±³¾°Í¼£º

ÓÅ»¯Ç° 1.6M ×óÓÒ£¬ÓÅ»¯ºó 700K ×óÓÒ¡£

ͬʱÎÒÃÇÒ²·¢ÏÖÁËĬÈÏͼƬһ¸öÆäËûÎÊÌ⣬ÒòΪÀúÊ·Ô­Òò£¬ÎÒÃÇʹÓõÄͼƬ¼ÓÔØ¿â£¬ÉèÖÃĬÈÏͼƬµÄ½Ó¿ÚÊÇÐèÒªÒ»¸ö bitmap£¬µ¼ÖÂÎÒÃÇÔ­À´¼¸ºõÿ¸ö adapter ¶¼Óà BitmapFactory decode ÁËÒ»¸ö bitmap£¬¶ÔͬһÕÅĬÈÏͼƬ£¬²»µ«Ã»Óи´Ó㬻¹±£´æÁ˶à·Ý£¬²»½ö»áÔì³ÉÄÚ´æÀË·Ñ£¬¶øÇÒµ¼Ö»¬¶¯Å¼¶û»á¿¨¶Ù¡£ÕâÀïÎÒÃÇÒ²¶ÔĬÈÏͼƬʹÓÃÈ«¾ÖµÄ bitmap »º´æ³Ø£¬App È«¾ÖֻҪʹÓÃͬһÕÅ bitmap£¬¶¼¸´ÓÃÁËͬһ·Ý¡£

ÁíÍâ¶ÔÓÚ´Ó MAT Àï¿´µ½µÄͼƬ£¬ÓÐʱºòÒòΪ¿´²»µ½ÔÚÏîÄ¿ÀïÃæ¶ÔÓ¦µÄ ID£¬»á±È½ÏÄÑÈ·Èϵ½µ×ÊÇÄÄÒ»ÕÅͼ£¬ÕâÀï stackoverflow ÉÏÓÐÒ»ÖÖ·½·¨£¬Ö±½ÓÓÃԭʼÊý¾Ýͨ¹ý GIM »¹Ô­ÕâÕÅͼƬ¡£

ÕâÀïÆäʵҲ¿´µ½ JOOX ±È½Ï³Ô¿÷Ò»¸öµØ·½£¬JOOX ²»Éٵط½¶¼ÊÇʹÓñȽϸ´ÔÓµÄͼƬ£¬Í¬Ê±ÓÐЩµØ·½»¹ÐèҪģºý£¬¶¯»­ÕâЩ¶¼ÊDZȽϺÄÄÚ´æµÄ²Ù×÷£¬Material Design ³öÀ´ºó£¬ºÜ¶à App ¶¼×ñÑ­ MD Éè¼Æ½øÐиİ棬ͨ³£Ä¬Èϱ³¾°£¬Ä¬ÈÏͼƬһ°ã¶¼ÊÇ´¿É«£¬²»½ö App ¿´ÆðÀ´±È½ÏÃ÷ÁÁÇá¿ì£¬Êµ¼ÊÉÏҲʡÁ˺ܶàµÄÄڴ棬¶Ô´Ë£¬JOOX ºóÃæ¶ÔµÍ¶Ë»úÐÍ×öÁ˶ÔÓ¦µÄÓÅ»¯¡£

3. ÎÒÃÇÒ²¶Ô RDM É쵀 OOM ½øÐÐÁË·ÖÎö£¬·¢ÏÖÆäʵÓÐЩ OOM ÊÇ¿ÉÒÔ±ÜÃâµÄ¡£

ÏÂÃæÕâ¸ö crash ¾ÍÊÇÉÏÃæÌáµ½µÄÔÚ LsitView µÄ adapter Àﲻͣ´´½¨ bitmap£¬Õâ¸öµØ·½ÊÇÎÒÃǵÄÊ×Ò³ banner 룬ÀíÂÛÉÏ App Ò»´ò¿ª¾Í»á»º´æÕâÕÅĬÈϱ³¾°Í¼Æ¬ÁË£¬¶øÊµ¼ÊÔÚʹÓùýÒ»¶Îʱ¼äºó£¬²ÅÒòΪΪÁ˽âÂëÕâÕű³¾°Í¼¶ø OOM, ¸ÄΪÓÃÈ«¾Ö»º´æ½â¾ö¡£

ÏÂÃæÕâ¸ö¾ÍÊÇ´«ËµÖеÄÄÚ´æ¶¶¶¯£º

ʵ¼Ê´úÂëÈçÏ£¬ÒòΪ´ò Log ¶ø½øÐÐÁË×Ö·û´®Æ´½Ó£¬Ò»µ©Õâ¸öº¯Êý±»±È½ÏƵ·±µØµ÷Óã¬ÄÇô¾ÍºÜÓпÉÄܻᷢÉúÄÚ´æ¶¶¶¯¡£ÕâÀïÎÒÃÇа汾ÒѾ­¸ÄΪʹÓà stringbuilder ½øÐÐÓÅ»¯¡£

»¹ÓÐһЩ±È½ÏÆæ¹ÖµÄÇé¿ö£¬ÕâÀïÊÇÎÒÃÇɨÃè¸èÇúÎļþÍ·µÄʱºò·¢ÉúµÄ£¬ÓÐЩÎļþÍ·¾ÓÈ»Óм¸°Ù M ´ó£¬µ¼ÖÂÒ»´ÎÉêÇëÁ˹ý´óµÄÄڴ棬ֱ½Ó OOM,ÕâÀïÔÝʱҲÎÞ·¨ÐÞ¸´£¬Ö±½Ó catch ס out of memory error¡£

4. ͬʱÎÒÃǶÔһЩÂß¼­´úÂë½øÐе÷Õû£¬±ÈÈçÎÒÃÇµÄ App Ö÷Ò³µÄµÚÈý¸ö tab(Live tab)½øÐÐÁËÊý¾ÝÑÓ³Ù¼ÓÔØ,ºÍ¶¨Ê±»ØÊÕ¡£

ÕâÀïÒòΪÕâ¸öÒ³Ãæ³ýÁËÓдóͼ»¹ÓÐÂÖ²¥ banner£¬Êµ¼ÊÇ¿ÒýÓõÄͼƬ»áÓжàÕÅ£¬Èç¹ûÕâ¸öʱºòÇе½ÆäËûÒ³Ãæ½øÐÐÌý¸èµÈÐÐΪ£¬Õâ¸öÒ³ÃæÒ»Ö±ÔÚºǫ́»º´æ£¬Êµ¼ÊÊǺÜÀ˷ѺÄÄÚ´æµÄ£¬Í¬Ê±ÎªÓÅ»¯ÌåÑ飬ÎÒÃÇÓÖ²»ÄÜÖ±½Óͨ¹ýÉèÖÃÖ÷Ò³µÄ viewpager µÄ»º´æÒ³Êý£¬ÒòΪÕâÑù¾­³£¶¼»á»ØÊÕ£¬µ¼ÖÂÓ°ÏìÌåÑ飬ËùÒÔÎÒÃÇÔÚÒ³Ãæ²»¿É¼ûºó¹ýÒ»¶Îʱ¼ä£¬ÇåÀíµô adapter Êý¾Ý(Ö»ÊÇÇå¿Õ adapter ÀïµÄÊý¾Ý£¬Êµ¼Ê´ÓÍøÂç¼ÓÔØ»ØÀ´µÄÊý¾Ý»¹ÔÚ£¬ÕâÀïÖ»ÊÇΪÁËÈ¥µô½çÃæ¶ÔͼƬµÄÒýÓÃ)£¬µ±Ò³ÃæÔÙ´ÎÏÔʾʱÔÙÓÃÒѾ­¼ÓÔØµÄÊý¾ÝÏÔʾ£¬¼´¼õÉÙÁ˺ܶàÇé¿öÏÂͼƬµÄÒýÓã¬Ò²²»Ó°ÏìÌåÑé¡£

5. ×îºóÎÒÃÇÒ²Óöµ½Ò»¸ö±È½ÏÆæÝâµÄÎÊÌ⣬ÔÚÎÒÃÇµÄ RDM Éϱ¨ÉÏÓÐÕâÑùÒ»ÌõÉϱ¨

ÎÒÃÇÔÚ stackoverflow ÉÏ¿´µ½ÁËÏà¹ØµÄÌÖÂÛ£¬´óÖÂÒâ˼ÊÇÓÐЩÇé¿öϱÈÈçÏ¢ÆÁ£¬»òÕßһЩʡµçģʽÏ£¬Æµ·±µØµ÷ System.gc()¿ÉÄÜ»áÒòΪÄÚºË״̬Çл»³¬Ê±µÄÒì³£¡£Õâ¸öÎÊÌâÃ²ËÆÃ»ÓбȽϺõĽâ¾ö·½·¨£¬Ö»ÄÜÊÇÓÅ»¯Äڴ棬¾¡Á¿¼õÉÙÊÖ¶¯µ÷Óà System.gc()

ÓÅ»¯½á¹û

ÎÒÃÇͨ¹ýÆô¶¯ App ºó£¬Çл»µ½ÎÒµÄÒôÀÖ½çÃæ£¬Í£Áô 1 ·ÖÖÓ£¬¶à´Î gc ºó£¬»ñÈ¡ App ÄÚ´æÕ¼ÓÃ

ÓÅ»¯Ç°:

ÓÅ»¯ºó:

¶à´ÎÊÔÑé½á¹û¶¼²î²»¶à£¬ÕâÀïÖ»½ØÈ¡ÁËÆäÖÐÒ»´Î£¬ÓÐ 28M µÄÓÅ»¯Ð§¹û¡£

µ±È»²»Í¬µÄ³¡¾°ÄÚ´æÕ¼Óò»Í¬£¬Í¬Ê±ÉÏÃæÊÔÑé½á¹ûÊÇͨ¹ý¶à´ÎÊÖ¶¯´¥·¢ gc Îȶ¨ºóµÄ½á¹û¡£¶ÔÓÚʹÓÃÆäËûµÚÈý·½¹¤¾ß²»ÊÖ¶¯ gc µÄÇé¿öÏ£¬ÊÔÑé½á¹û¿ÉÄÜ»á²îÒì±È½Ï´ó¡£

¶ÔÓÚÉÏÃæÌáµ½µÄ JOOX Àï¸÷ÖÖͼƬ±³¾°µÈÎÊÌ⣬ÎÒÃÇ×öÁ˶¯Ì¬µÄÓÅ»¯£¬¶Ô²»Í¬µÄ»úÐͽøÐÐÓÅ»¯,¶ÔÌØ±ðµÍ¶ËµÄ»úÐÍÉèÖÃΪ´¿É«±³¾°µÈ·½Ê½£¬×îÖÕÓÅ»¯Ð§¹ûÈçÏ£º

ƽ¾ùÄÚ´æ½µµÍ 41M¡£

±¾´Î×ܽáÖ÷Òª»¹ÊÇ´ÓͼƬ·½ÃæÏÂÊÖ£¬»¹ÓÐÒ»µãÂß¼­ÓÅ»¯£¬ÒѾ­»ù±¾´ïµ½ÓÅ»¯Ä¿±ê¡£

ËÄ¡¢×ܽá

ÉÏÃæÐ´Á˺ܶ࣬ÎÒÃÇ¿ÉÒÔ¼òµ¥×ܽᣬĿǰ Andorid ÄÚ´æÓÅ»¯»¹ÊDZȽÏÖØÒªÒ»¸ö»°Ì⣬ÎÒÃÇ¿ÉÒÔͨ¹ý¸÷ÖÖÄÚ´æÐ¹Â¶¼ì²â×é¼þ£¬MAT ²é¿´ÄÚ´æÕ¼Óã¬Memory Monitor ¸ú×ÙÕû¸ö App µÄÄÚ´æ±ä»¯Çé¿ö, Heap Viewer ²é¿´µ±Ç°ÄÚ´æ¿ìÕÕ, Allocation Tracker ×·×ÙÄÚ´æ¶ÔÏóµÄÀ´Ô´,ÒÔ¼°ÀûÓñÀÀ£Éϱ¨Æ½Ì¨´Ó¶à¸ö·½Ãæ¶Ô App ÄÚ´æ½øÐÐ¼à¿ØºÍÓÅ»¯¡£ÉÏÃæÖ»ÊÇÁоÙÁËһЩ³£¼ûµÄÇé¿ö£¬µ±È»Ã¿¸ö App ¹¦ÄÜ£¬Âß¼­£¬¼Ü¹¹Ò²¶¼²»Ò»Ñù£¬Ôì³ÉÄÚ´æÎÊÌâÒ²ÊDz»¾¡Ïàͬ£¬ÕÆÎպù¤¾ßµÄʹÓ㬷¢ÏÖÎÊÌâËùÔÚ£¬²ÅÄܶÔÖ¢ÏÂÒ©¡£

²Î¿¼×ÊÔ´

1.Android ²Ù×÷ϵͳµÄÄÚ´æ»ØÊÕ»úÖÆ

2.°¢Àï°Í°ÍµÄ Android ÄÚ´æÓÅ»¯·ÖÏí

3.Android ½ø³ÌµÄÄÚ´æ¹ÜÀí·ÖÎö

4.Android Dalvik Heap dzÎö

5.½ÒÃØ ART ϸ½Ú ¡ª¡ª Garbage collection

6.Android ÐÔÄÜÓÅ»¯Ö®³£¼ûµÄÄÚ´æÐ¹Â©

7.Android App ÄÚ´æÐ¹Â¶Ö® Handler

8.GlideBitmapPool

9.Android ÐÔÄÜÓÅ»¯Ö® String ƪ

10.HashMap£¬ArrayMap£¬SparseArray Ô´Âë·ÖÎö¼°ÐÔÄܶԱÈ

11.MAT ʹÓý̳Ì

12.MAT - Memory Analyzer Tool ʹÓýø½×

   
2063 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ