2010-06-16 8 views
5

나는 안드로이드 마켓에서 복제본을 가지고 있는데, 예외 및 오류가 발생하여 acra가 나에게 보낸다.메모리 부족 오류, 내 앱의 오류?

는하지만 클래스의 다른 종류에서 .. 메모리 부족 오류가 꽤 많이받을 ... 일부 내 응용 프로그램, 몇 가지 일반적인 자바 ..이 항상 내 응용 프로그램에 문제가 의미합니까

, 또는 다른 프로세스로 인해 메모리가 부족할 수도 있습니까?

사용자가 fc 대화 상자를 볼 수 있습니까?

추가 정보

내 응용 프로그램에서 아무것도 메모리 intensite이 있습니다

..

어떤 이미지를 ... 데이터의 더 큰 덩어리가 .. 만 간단한 view..and 가장 많이 몹 클릭스 광고 ..

나는 새로운 자바 ... 그래서 어딘가에 누수가있을 수 있습니다 ..하지만 그것을 디버깅하는 것이 어렵습니다. 하지만이 시점에서 나는 틀린 부분이 있는지조차 확신하지 못합니다 ...

나는 약 25 -50 OOM 오류가 매일 발생하지만 일일 60.000 광고와 비교할 때. (시작될 때마다 1 ~ 2 개의 광고 만 표시) 너무 많지 않습니다.

1과 같은 오류가 나타납니다 : 내가 어딘가에 누출

"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 android.net.http.AndroidHttpClientConnection.bind(AndroidHttpClientConnection.java:114) 
at android.net.http.HttpConnection.openConnection(HttpConnection.java:61) 
at android.net.http.Connection.openHttpConnection(Connection.java:378) 
at android.net.http.Connection.processRequests(Connection.java:237) 
at android.net.http.ConnectionThread.run(ConnectionThread.java:125) 

"

"java.lang.OutOfMemoryError 
at java.io.BufferedReader.<init>(BufferedReader.java:102) 
at com.mobclix.android.sdk.Mobclix$FetchResponseThread.run(Mobclix.java:1422) 
at com.mobclix.android.sdk.MobclixAdView$FetchAdResponseThread.run(MobclixAdView.java:390) 
at java.util.Timer$TimerImpl.run(Timer.java:290) 

"

"java.lang.OutOfMemoryError 
at org.apache.http.util.ByteArrayBuffer.<init>(ByteArrayBuffer.java:53) 
at org.apache.http.impl.io.AbstractSessionOutputBuffer.init(AbstractSessionOutputBuffer.java:77) 
at org.apache.http.impl.io.SocketOutputBuffer.<init>(SocketOutputBuffer.java:76) 
at android.net.http.AndroidHttpClientConnection.bind(AndroidHttpClientConnection.java:115) 
at android.net.http.HttpConnection.openConnection(HttpConnection.java:61) 
at android.net.http.Connection.openHttpConnection(Connection.java:378) 
at android.net.http.Connection.processRequests(Connection.java:237) 
at android.net.http.ConnectionThread.run(ConnectionThread.java:125) 

"

그래서 주요 질문 is..am .. 또는 수 있습니다. 이는 정상적인 것으로 간주 될 수 있습니다. 일부 경우에는 전화가 실행되는 다른 애플리케이션으로 인해 메모리가 부족할 수 있기 때문입니다.

+0

응용 프로그램이 매우 많은 메모리를 요구할 가능성이 있습니까? 또는 http://developer.android.com/resources/articles/avoiding-memory-leaks.html에서 컨텍스트가 언젠가 유출되었다고 말했습니까? – xandy

+0

이것은 아마도 http://stackoverflow.com/questions/5358014/android-httpclient-oom-on-4g-lte-htc-thunderbolt –

+0

에서 xandy의 링크가 작동하지 않아 논의 된 것과 동일한 문제 일 수 있습니다. 여기에 [생방송] (http://android-developers.blogspot.ru/2009/01/avoiding-memory-leaks.html)이 있습니다. –

답변

0

통제 할 수없는 일이 있습니다 (전화의 메모리가 그 예입니다). 그럼에도 불구하고 애플리케이션의 동작에 책임이 있습니다.

메모리 문제를 어떻게 처리하면 사용자가 응용 프로그램을 보는 방식에 영향을줍니다. 다른 응용 프로그램과 잘 작동하면 사용자가 응용 프로그램을 사용하게됩니다. 그렇지 않은 경우에는 그렇지 않습니다.

0

"일반적인 자바"예외가 무엇을 의미합니까? 그렇다면이 내용이 귀하의 소프트웨어와 관련이 없다면 그 이유는 무엇입니까?

Dalvik 가상 시스템에는 자체 메모리와 응용 프로그램에 할당 된 메모리 만 있습니다. 이렇게하면 프로세스가 제어 할 수 없게되고 가능한 모든 자원이 소모되어 전화기를 사용할 수 없게 될 수 있습니다. 따라서 응용 프로그램이 많은 메모리를 많이 사용하는 작업 (예 : 사진로드)을 수행하고 할당에주의하지 않는 경우 (그리고 불필요한 부분을 정리하자마자) 기괴한 결과가 관찰 될 수 있습니다.

예외를 잡았으므로 무언가를 다시 인스턴스화하지 못한 경우를 제외하고 이러한 예외를 포착 했으므로 응용 프로그램이 중단되지 않아야합니다.

아마도 코드를 검사하고 불필요한 메모리 할당을 제거하는 것이 도움이 될 것입니다. 내 상사처럼 또한, 테스트 할 수 있습니다 - 그가 뭔가 충돌 할 때까지 무작위로 버튼을 눌러 밖으로 괴물 : D

편집

당신이 (SAN을 광고 코드에서 아무것도 메모리 비용이 말 때문에 아마도) 오류가 발생할 때 전체 시스템의 메모리가 부족한 지 또는 오류를 일으키는 응용 프로그램인지 여부를 확인하는 간단한 검사를 할 수 있습니다. onLowMemory 콜백을 살펴보십시오. 전체 폰의 메모리가 부족할 때 호출됩니다.

1

토마스가 제안했듯이 DDMS를 사용하여 메모리 사용량을 확인하고 싶습니다.

또한 누출에 대한 매우 일반적인 문제는 정적 변수를 사용하는 것입니다. 사용자가 수행하는 작업을 알고있는 경우에만 사용하십시오.

처리 비트 맵은 Android에서도 매우 비쌉니다. 앱이하는 일은 무엇입니까? 또한 모든 UI 요소에 대한 참조가 많이 있습니까? 어떤 것들은 정적으로 정의 되었습니까?

0

OutOfMemoryError를 얻으면 응용 프로그램이 아닌 응용 프로그램인지 확인할 수 있습니다. 각 안드로이드 애플 리케이션은 그것의 자신의 Dalvik VM에서 16Mb의 최대 메모리 할당으로 실행됩니다.

비트 맵 (메모리 누출의 빈번한 원인)을 사용하지 않는 경우 방향 변경을 올바르게 처리하는지 확인해야합니다. 즉, UI를 기준으로 개체에 대한 참조를 메모리에 유지하지 않아도됩니다.

3

일반적인 JVM 문제점은 참조되지 않은 오브젝트 만 가비지 콜렉터에 의해 제거 될 수 있다는 것입니다. 커다란 영속 객체가있는 경우 해당 객체의 사용되지 않는 변수를 null로 설정하여 참조 해제되도록하는 것이 중요합니다. 고전적인 문제는 HashMap의 모든 항목이 메모리를 씹기 때문에 HashMap 객체가 필요하지 않을 때 많은 값을 가진 HashMap 객체와 같은 것을 유지하는 것입니다.