2017-09-25 1 views
0

Ich erhalte ein OutOfMemoryError in meiner App:Wie zu bestimmen, wo OutOfMemory auf Android aufgetreten ist?

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) 

ich meinen Log überprüfen, aber ich weiß nicht, wo die OutOfMemory in meiner Quelle auftritt.

Wie behebt man das Problem mit dem Out-of-Memory?

+0

Versuchen Sie, alle schweren Bilder aus dem Ordner "Drawable" in den Ordner "Drawable-Nodpi" zu verschieben. Überprüfen Sie diese [link] (https://medium.com/@oronno/android-drawable-outofmemoryerror-ebe2995760b6) – Shruti

+0

https://Stackoverflow.com/a/46401786/3395198 –

Antwort

0

In Ihrem Manifest Anwendungsabschnitt Add folgenden unter

 android:largeHeap="true"> 

Dies ist die vorübergehende Lösung, um die wirklichen Ursachen und

+2

Sir, 'largeHeap' ist nicht gut Lösungen. –

+0

danke, @IntelliJAmiya Was ist eine gute Lösung? – hyunwooks

+0

@hyunwooks überprüfen Sie bitte https://developer.android.com/topic/performance/graphics/load-bitmap.html –

0

Verwenden Android finden lösen haben: largeHeap = „true“, diese zu lösen

Überprüfen Sie, ob die Bildgröße kleiner als der verfügbare Speicher ist, bevor Sie versuchen, sie zu laden. Die effizienteste Methode zur Behandlung von OutOfMemoryException besteht also darin, Ihre Anwendung so zu strukturieren, dass sie niemals versucht, viele Daten in den Speicher zu laden, um die Ausnahme zu vermeiden.

+0

Ich denke nicht, dass "allowBackup" hier, weder 'hilfreich sein wird großerHeep'. Obwohl ich der Tatsache zustimme, dass Sie eine gute Architektur brauchen, die nicht zu viele Ressourcen gleichzeitig verwendet. Außerdem ist eine App frei, was Sie versuchen sollten zu erreichen, da aus meiner Erfahrung diese die meisten Abstürze verursachten. –

+0

@Geeta Gupta Ich weiß 'Android: allowBackup =" true "' ist automatische Backup-Option gesetzt. Warum setze 'allowBackup' meine Quelle? – hyunwooks

+0

'android: allowBackup =" true "' falscher Punkt. –

0

Sie müssen finden, wo Sie speicherintensive Aufgaben erledigen. Sie müssen auch Speicherlecks vermeiden. Sie können eine Bibliothek verwenden, um Speicherlecks zu verfolgen. https://github.com/square/leakcanary

Verwandte Themen