androidメモリリーク--ローディングネットワーク画像--android 127265-byte external allocation too large for this process.

2624 ワード

httpネットワークで画像をロードする時、3枚目の画像をロードすると、メモリ漏れが発生します。ロゴは以下の通りです。
006-01 05:58:52.533:E/dalvikvm-heap(3477):127242656-byte external allocation too large for this process.06-01 05:58:52.533:E/GraphcsJNI(3477):VM won't let us allocate allocate 127272727272727272727272727272727272727272727272727200007272727272727272000626262626262626262626262626262626262626 dedededededededededededededededededededededededededededededededededededede// dalvikvm(3477):threadid=7:thread exiting with uncaugt(group=0 x 4001 d 800)06-01 05:58:52.553:E/Android dRuntime(3477):FATAL EXCEPTION:Thread-8 06-01 05:52:52.55:E/Android dRuntime(3477):java.lang.OutfMemoryrome:Erredzed 05    at android.graphics.Bitmap Factory.native DecodeStream(Native Method)06-01 05:58:52.553:E/Android dRuntime(3477):    at android.graphics.Bitmap Factory.decodestream(Bitmap Factory.java:459)06-01:58:52.553:E/Android dRuntime(3477):    at android.graphics.Bitmap Factory.decodestream(Bitmap Factory.java:515)06-01:58:52.553:E/Android dRuntime(3477):    at comp.example.httptest.MainActivity.refresh(MainActivity.java:79)06-01 05:58:52.55:E/Android dRuntime(3477):    at comp.example.httptest.MainActivity.access$2(MainActivity.java:72)06-01 05:58:52.553:E/Android dRuntime(3477):    at comp.example.httptest.MainActivity$2.run(MainActivity.java:66)
赤色のフォントが示すようにエラーがあります。androidプログラムのメモリは16 Mに制限されます。もちろん24 Mもあります。androidプログラムのメモリは2つの部分に分けられています。nativeとdalvik、dalvikは私達が普段言っているjavaスタックです。私達が作成したオブジェクトはこの中に割り当てられています。これらの間は共有できません。つまり、nativeメモリがなくなっても、dalvikのメモリは使えません。
Android         ,JAVA  garbage collection (GC )      。                M   ,              
06-01 05:58:52.533: E/dalvikvm-heap(3477): 12742656-byte external allocation too large for this process.

          ,               。    :
1.    System.gc();                ,        。

2.           。
     BitMap             。  bitmap.recycle();                    。

3.         
 BitmapFactory         options  (     options),  Options    :
Bitmap Factory.Options options=new Options()    options.inDither=false;   /*画像の手ぶれ処理を行わない*/    options.inPreferredConfig=null; /*デコーダを最適な形で復号するように設定します。    options.insampleSize=4;         /*画像のアスペクト方向の倍数縮小*/    Bitmap Bitmap Factory.decodeByteAray(buffer,0,buffer.length,options)を修正したところ、携帯電話に届いた写真は普通200 KBぐらいになりました。つまり、元の1/4以上に縮小した3種類はネットで見つけられた方法です。
参考記事:
http://blog.csdn.net/jiadebin890724/article/details/7426174
http://zhidao.baidu.com/link?url=pspqY2BB-dw 7 Kk 5163 DA 9 soIi 6 dmKgbbbbbbbbbbb 80 N 5 sAU 9 BQYbh 1 hj 0 y 7 gzyxbx 3 EhnzLj 4 em 2 ISaW 2 iK