標籤:exit 方法 nbsp span edit print options rri lru
這裡要引用一篇文章,http://blog.csdn.net/editor1994/article/details/50394560 非常不錯的一篇分析OOM問題
項目中載入了大量的圖片使用完之後沒有被釋放,從而導致記憶體泄露,直到OOM,後來我使用上面文章使用到的方法發現是有效果,但是在一個介面多次頻繁還是會出,於是萬般無奈之下只能換了Glide圖片載入架構,
自訂了一個GlideModule,
1 /** 2 * Created by admin on 2017/4/7. 3 */ 4 5 public class GlideDemo implements GlideModule { 6 @Override 7 public void applyOptions(Context context, GlideBuilder builder) { 8 builder.setMemoryCache(new LruResourceCache(2*1024*1024)); 9 builder.setBitmapPool(new LruBitmapPool(2*1024*1024));10 }11 12 @Override13 public void registerComponents(Context context, Glide glide) {14 15 }16 }
載入圖片時候的代碼
1 Glide.with(lYActivity.this)2 .load(arrayList.get(position).getBigimg())3 .error(R.drawable.mimg)4 .skipMemoryCache(false)5 .diskCacheStrategy(DiskCacheStrategy.ALL)6 .into(mImage);
目前問題算是解決了,後續在補充,還有啟動一個Server,即時監聽記憶體的使用方式,如果記憶體快要超出指定的記憶體,強制返回首頁並且釋放資源
監聽記憶體的Service代碼
1 timer = new Timer(); 2 timerTask = new TimerTask() { 3 @Override 4 public void run() { 5 //應用程式最大可用記憶體 6 int maxMemory = ((int) Runtime.getRuntime().maxMemory())/1024/1024; 7 //應用程式已獲得記憶體 8 long totalMemory = ((int) Runtime.getRuntime().totalMemory())/1024/1024; 9 //應用程式已獲得記憶體中未使用記憶體10 long freeMemory = ((int) Runtime.getRuntime().freeMemory())/1024/1024;11 Sysout.println("我---> 應用記憶體="+maxMemory+"M,以及使用的="+totalMemory+"M,剩下的="+freeMemory+"M");12 if(totalMemory > 58){13 // Toast.makeText(NeiCunService.this, "程式異常,正在重啟,請稍後", Toast.LENGTH_SHORT).show();14 context.sendBroadcast(new Intent("com.zhushiyun.oom"));15 // System.exit(0);16 //timer.cancel();17 }18 }19 };20 timer.schedule(timerTask,1000,5000);21 Sysout.println("我是監控內容的我已經啟動");
Android學習筆記--使用Universal-Image-Loaderf發生OOM到解決OOM問題