編輯:關於Android編程
首先處理這個問題,用了1個星期,非常努力,拼命的尋找哪裡出現了OOM 內存溢出的問題,可是都沒找到結果,一直以為是自己使用的Picaso加載圖片框架,只加載了圖片,但是activity 銷毀時,沒有做內存釋放的功能,所以自己去嘗試方法去解決問題:
1.換一個圖片框架:Xutil 圖片框架
結果只是換湯不換藥。 還是會出現OOM ,內存溢出問題
2.圖片單獨處理:網上說針對於大圖,要做縮放處理,並對生成的BitMap 對象進行內存處理
private void initDisplayImageOption(){ options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.video_default) //設置圖片在下載期間顯示的圖片 .showImageForEmptyUri(R.drawable.image_background_empty) //設置圖片Uri為空或是錯誤的時候顯示的圖片 //.showImageOnFail(R.drawable.image_background_erro) //設置圖片加載/解碼過程中錯誤時候顯示的圖片 .cacheInMemory(false) //設置下載的圖片是否緩存在內存中 .cacheOnDisk(true) //設置下載的圖片是否緩存在SD卡中 .considerExifParams(true) //是否考慮JPEG圖像EXIF參數(旋轉,翻轉) .imageScaleType(ImageScaleType.EXACTLY_STRETCHED) //設置圖片以如何的編碼方式顯示 .bitmapConfig(Bitmap.Config.RGB_565) //設置圖片的解碼類型// //.decodingOptions(android.graphics.BitmapFactory.Options decodingOptions) //設置圖片的解碼配置 .delayBeforeLoading(0) //int delayInMillis為你設置的下載前的延遲時間 .resetViewBeforeLoading(true)//設置圖片在下載前是否重置,復位 .displayer(new FadeInBitmapDisplayer(100))//是否圖片加載好後漸入的動畫時間 .build();//構建完成 } @Override protected void onDestroy() { mam.popOneActivity(HostessDetailUI.this); Log.e("onDestroy() isRun!!!"); mHostessImgs.setAdapter(null); /**釋放圖片,控件圖片引用資源*/ BitmapDrawable bitmapDrawable = (BitmapDrawable) mHostessMiddle.getBackground(); mHostessMiddle.setBackgroundResource(0); bitmapDrawable.setCallback(null); drawable.setCallback(null); Bitmap bitmap = bitmapDrawable.getBitmap(); if(bitmap != null && !bitmap.isRecycled()){ bitmap.recycle();//回收圖片所占的內存 bitmap = null; } btp.recycle(); //回收圖片所占的內存 System.gc(); super.onDestroy(); }
3.換一種強大的圖片框架:Universal-Image_loader(UIL)
看見網上說UIL是目前最流行,用戶最多,個人配置最全的圖片框架,於是乎自己換掉picaso,來到UIL的懷抱,可是還是報OOM問題,每次看日志都是跑到96MB閃退。
自己懷疑是自己對UIL理解不深,配置不全,還是沒有釋放內存。(有時間詳細看下UIL源碼實現)
4.換上最新的圖片處理框架:Facebook 推薦的fresco 框架
dependencies { compile 'com.facebook.fresco:fresco:0.5.0+' }
5.去掉後台的大圖,顯示完整
程序不崩潰了,心裡有很多的安慰,畢竟問題已經出現了1個星期了,然而還是有一些個別的圖片很久都加載不出來,fresco框架這麼好,為什麼還是有圖片加載不出來你。然後看日志 提示:加載圖片太大,無法下載出來,於是看了下後台拉取的圖片大小。納尼。, 一張圖片7MB!! 再完美的框架針對這種圖片也是沒辦法的吧,所以讓後台處理的圖片規格。
最終解決辦法:換上fresco框架+後台圖片縮小處理。現在程序不會出現OOM問題了。好開心!(不過內存釋放問題,自己還是沒有做好,有待提高!)
下面為控件的實現歷程: 此控件高效,直接使用ondraw繪制,先亮照: 由於Android自身的星星評分控件樣式可以改,但是他的大小不好調整的缺點,只能用small no
1.前言市面上關於Android的技術書籍很多,幾乎每本書也都會涉及到藍牙開發,但均是上層應用級別的,而且篇幅也普遍短小。對於手機行業的開發者,要進行藍牙模塊的維護,就必
貝塞爾曲線開發的藝術一句話概括貝塞爾曲線:將任意一條曲線轉化為精確的數學公式。很多繪圖工具中的鋼筆工具,就是典型的貝塞爾曲線的應用貝塞爾曲線中有一些比較關鍵的名詞,解釋如
叨了個叨最近因為換工作的一些瑣事搞的我一個頭兩個大,也沒怎麼去學新東西,實在是有些愧疚。新項目用到了EventBus3.0,原來只是聽說EventBus的鼎鼎大名,一直沒