Ogu*_*han 11 java android json httpclient out-of-memory
我有一个Android应用程序,JSONObject通过使用ByteArrayEntity对象发布为实体.这是它的样子:
post.setEntity(new ByteArrayEntity(entity.getBytes("UTF-8")));
result = client.execute(post, handler);
Run Code Online (Sandbox Code Playgroud)
实体是一个String.处理程序是ResponseHandler<String>和客户端是一个HttpClient.这在模拟器和某些设备上运行良好.但是,有时我在执行时会得到OutOfMemoryError x10i(也称为XPERIA).
这是堆栈:
java.lang.OutOfMemoryError
at org.apache.http.impl.io.AbstractSessionInputBuffer.init(AbstractSessionInputBuffer.java:79)
at org.apache.http.impl.io.SocketInputBuffer.<init>(SocketInputBuffer.java:93)
at org.apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.java:83)
at org.apache.http.impl.conn.DefaultClientConnection.createSessionInputBuffer(DefaultClientConnection.java:170)
at org.apache.http.impl.SocketHttpClientConnection.bind(SocketHttpClientConnection.java:106)
at org.apache.http.impl.conn.DefaultClientConnection.openCompleted(DefaultClientConnection.java:129)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:171)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:580)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:678)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:652)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
at com.test.application.api.Request.post(Request.java:102)
at com.test.application.api.API.getResult(API.java:123)
at com.test.application.api.APITask.doInBackground(APITask.java:127)
at com.test.application.api.APITask.doInBackground(APITask.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)
Run Code Online (Sandbox Code Playgroud)
正如我所说,我只是将JSONObject发布为String.它最多可能是200个字符.怎么了?
Android设备具有每进程内存限制.默认默认值为24MB,但某些设备的值较低,例如16MB或更低.X10i似乎有384MB RAM,对于现代Android设备而言是低的(1GB现在是标准的),这可能会产生额外的限制.
我会建议:
你可能会发现,在你打这个电话之前,你已经处于记忆的上限; HTTPClient的初始化和调用可能会超过限制.如果OOM在第一次调用时发生,则更有可能发生这种情况.
如果只是偶尔发生这种情况,或者在多次调用之后,您可能会发生内存泄漏.DDMS将使用获取分配功能帮助您跟踪该情况.
| 归档时间: |
|
| 查看次数: |
1927 次 |
| 最近记录: |