如何确定Android上OutOfMemory的位置?

时间:2017-09-25 06:33:56

标签: java android out-of-memory

我在我的应用中获得OutOfMemoryError

FATAL EXCEPTION: Thread-11746
Process: kr.co.iosystem.blackeyeonandroid, PID: 1618
java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Try again
at java.lang.Thread.nativeCreate(Native Method)
at java.lang.Thread.start(Thread.java:1063)
at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:921)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1337)
at com.android.okhttp.ConnectionPool.addConnection(ConnectionPool.java:208)
at com.android.okhttp.ConnectionPool.recycle(ConnectionPool.java:198)
at com.android.okhttp.OkHttpClient$1.recycle(OkHttpClient.java:111)
at com.android.okhttp.internal.http.HttpConnection$AbstractSource.endOfInput(HttpConnection.java:377)
at com.android.okhttp.internal.http.HttpConnection$FixedLengthSource.read(HttpConnection.java:426)
at com.android.okhttp.okio.RealBufferedSource$1.read(RealBufferedSource.java:349)
at java.io.InputStreamReader.read(InputStreamReader.java:233)
at java.io.BufferedReader.fillBuf(BufferedReader.java:145)
at java.io.BufferedReader.readLine(BufferedReader.java:397)
at com.github.nkzawa.engineio.client.transports.PollingXHR$Request.onLoad(PollingXHR.java:292)
at com.github.nkzawa.engineio.client.transports.PollingXHR$Request.access$600(PollingXHR.java:135)
at com.github.nkzawa.engineio.client.transports.PollingXHR$Request$1.run(PollingXHR.java:214)
at java.lang.Thread.run(Thread.java:818)

我检查了我的日志,但我不知道在我的来源中发生了内存。

如何修复outofmemory问题?

3 个答案:

答案 0 :(得分:0)

在您的清单申请部分中添加以下内容

       android:largeHeap="true"> 

这是临时解决方案,你必须找出真正的原因并解决

答案 1 :(得分:0)

使用android:largeHeap =" true"解决这个问题

在尝试加载图像之前,检查图像尺寸是否小于可用内存。因此,处理OutOfMemoryException的最有效方法是以这样一种方式构建应用程序:它永远不会尝试将大量数据加载到内存中以避免异常。

答案 2 :(得分:0)

您必须找到执行内存密集型任务的位置。你还必须避免内存泄漏。 您可以使用库来跟踪内存泄漏。 https://github.com/square/leakcanary