1志鹃、引入largeHeap屬性夭问,讓系統(tǒng)為App分配更多的獨(dú)立內(nèi)存。
2曹铃、禁止Glide內(nèi)存緩存缰趋。設(shè)置skipMemoryCache(true)。
3铛只、自定義GlideModule埠胖。設(shè)置MemoryCache和BitmapPool大小。
4淳玩、升級(jí)到Glide4.0直撤,使用asDrawable代替asBitmap,drawable更省內(nèi)存蜕着。
5谋竖、ImageView的scaleType為fitXY時(shí)红柱,改為fitCenter/centerCrop/fitStart/fitEnd顯示。
6蓖乘、不使用application作為context锤悄。當(dāng)context為application時(shí),會(huì)把imageView是生命周期延長(zhǎng)到整個(gè)運(yùn)行過(guò)程中嘉抒,imageView不能被回收零聚,從而造成OOM異常。
7些侍、使用application作為context隶症。但是對(duì)ImageView使用弱引用或軟引用,盡量使用SoftReference岗宣,當(dāng)內(nèi)存不足時(shí)蚂会,將及時(shí)回收無(wú)用的ImageView。
8耗式、當(dāng)列表在滑動(dòng)的時(shí)候胁住,調(diào)用Glide的pauseRequests()取消請(qǐng)求,滑動(dòng)停止時(shí)刊咳,調(diào)用resumeRequests()恢復(fù)請(qǐng)求彪见。
9、Try catch某些大內(nèi)存分配的操作芦缰∑蟪玻考慮在catch里面嘗試一次降級(jí)的內(nèi)存分配操作。例如decode bitmap的時(shí)候让蕾,catch到OOM浪规,可以嘗試把采樣比例再增加一倍之后,再次嘗試decode探孝。
10笋婿、BitmapFactory.Options和BitmapFactory.decodeStream獲取原始圖片的寬、高顿颅,繞過(guò)Java層加載Bitmap缸濒,再調(diào)用Glide的override(width,height)控制顯示。
11粱腻、圖片局部加載庇配。參考:SubsamplingScaleImageView,先將圖片下載到本地绍些,然后去加載捞慌,只加載當(dāng)前可視區(qū)域,在手指拖動(dòng)的時(shí)候再去加載另外的區(qū)域柬批。