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のメモリは使えません。
参考記事:
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
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