Verizonの4G/LTEでアプリケーションを使用しようとすると、クラッシュのユーザーからいくつかの報告があります。
スタックトレースを見ると、AndroidのHttpClient.execute()実装がOOMをスローしているように見えます。これは、4G / LTEデバイス、特にHTC Thunderboltでのみ発生し、4G/LTEでのみ発生します。WiFi、3G、UMTSはOKです。SprintのWiMax4Gでも問題なく動作します。
2つの質問:
これについてAndroid開発者の注意を引くための最良の方法は何ですか?http://code.google.com/p/android/issuesで報告するよりも良いオプションはありますか?
これを回避する方法について何かアイデアはありますか?私自身は4Gデバイスを持っておらず、エミュレーターでこれを実現できないため、ここで知識に基づいた推測を行う必要があります。コードでOOMをキャッチし、クリーンアップしてGCを強制することはできますが、それが良いアイデアかどうかはわかりません。コメントやその他の提案?
これが私のコードがしていることです:
HttpParams params = this.getHttpParams(); // returns params
ClientConnectionManager cm = new ThreadSafeClientConnManager(params, this.getHttpSchemeRegistry() );
DefaultHttpClient httpClient = new DefaultHttpClient( cm, params );
HttpResponse response = null;
request = new HttpGet( url );
try {
response = httpClient.execute(request); // <-- OOM on 4G/LTE. OK otherwise
int statusCode = response.getStatusLine().getStatusCode();
Log.i("fetcher", "execute returned, http status " + statusCode );
...
クラッシュするスタックトレースは次のとおりです。
E / dalvikvm-heap(11639):2055696バイトの割り当てでメモリ不足。I / dalvikvm(11639):"スレッド-16"prio = 5 tid=9実行可能I/dalvikvm(11639):| group = "main" sCount = 0 dsCount = 0 s = N obj = 0x48563070 self = 0x3c4340 I / dalvikvm(11639):| sysTid = 11682 nice = 0 sched = 0/0 cgrp = default handle = 3948760 I / dalvikvm(11639):| schedstat =(208709711 74005130 214)
I / dalvikvm(11639):org.apache.http.impl.io.AbstractSessionInputBuffer.init(AbstractSessionInputBuffer.java:~79)I / dalvikvm(11639):org.apache.http.impl.io.SocketInputBuffer。( SocketInputBuffer.java:93)I / dalvikvm(11639):org.apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.java:83)I / dalvikvm(11639):org.apache.http.impl.connで。 DefaultClientConnection.createSessionInputBuffer(DefaultClientConnection.java:170)I / dalvikvm(11639):org.apache.http.impl.SocketHttpClientConnection.bind(SocketHttpClientConnection.java:106)I / dalvikvm(11639):org.apache.httpで。 impl.conn.DefaultClientConnection.openCompleted(DefaultClientConnection.java:129)I / dalvikvm(11639):org.apache.http.impl.conn.DefaultClientConnectionOperatorにあります。openConnection(DefaultClientConnectionOperator.java:173)I / dalvikvm(11639):org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)I / dalvikvm(11639):org.apache.httpで。 impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)I / dalvikvm(11639):org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)I / dalvikvm(11639):at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)I / dalvikvm(11639):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)I / dalvikvm(11639):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)I / dalvikvm(11639):com.myapplication.Fetcher.trySourceFetch(Fetcher.java:205)I / dalvikvm(11639):comで。myapplication.Fetcher.run(Fetcher.java:298)I / dalvikvm(11639):java.lang.Thread.run(Thread.java:1102)でI / dalvikvm(11639):E / dalvikvm(11639):メモリ:ヒープサイズ= 24171KB、割り当て済み= 23142KB、ビットマップサイズ= 59KB、制限= 21884KB E / dalvikvm(11639):追加情報:フットプリント= 24327KB、許可されたフットプリント= 24519KB、トリミング= 348KB W / dalvikvm(11639):threadid = 9:キャッチされない例外でスレッドが終了します(group = 0x40025b38)キャッチされない例外で終了するスレッド(group = 0x40025b38)キャッチされない例外で終了するスレッド(group = 0x40025b38)