2016-07-18 100 views
0

我試圖發送帶附件的電子郵件時出現內存不足異常。Android應用程序內存不足,無法處理圖像

不幸的是,除非增加堆分配的大小,否則我無法診斷/修復問題。據我所知,附件不是特別大,它適用於某些安裝,但不適用於其他安裝。

07-18 15:29:58.912 2471-21587/uk.co.nwhub.nwtapp E/art: Throwing OutOfMemoryError "Failed to allocate a 37440820 byte allocation with 16777120 free bytes and 18MB until OOM" 
07-18 15:29:58.922 2471-21587/uk.co.nwhub.nwtapp E/AndroidRuntime: FATAL EXCEPTION: IntentService[EmailService] 
Process: uk.co.nwhub.nwtapp, PID: 2471 
java.lang.OutOfMemoryError: Failed to allocate a 37440820 byte allocation with 16777120 free bytes and 18MB until OOM 
    at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95) 
    at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:133) 
    at java.lang.StringBuilder.append(StringBuilder.java:124) 
    at libcore.net.UriCodec.appendEncoded(UriCodec.java:119) 
    at libcore.net.UriCodec.encode(UriCodec.java:133) 
    at java.net.URLEncoder.encode(URLEncoder.java:57) 
    at com.amazonaws.util.HttpUtils.urlEncode(HttpUtils.java:74) 
    at com.amazonaws.auth.AbstractAWSSigner.getCanonicalizedQueryString(AbstractAWSSigner.java:173) 
    at com.amazonaws.auth.AWS3Signer.sign(AWS3Signer.java:112) 
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:326) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:199) 
    at com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient.invoke(AmazonSimpleEmailServiceClient.java:2630) 
    at com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient.sendRawEmail(AmazonSimpleEmailServiceClient.java:1525) 
    at uk.co.nwhub.nwtapp.services.EmailService.onHandleIntent(EmailService.java:126) 
    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:145) 
    at android.os.HandlerThread.run(HandlerThread.java:61) 

我正在閱讀的所有幫助/指導有關狀態在處理圖像時,在這種情況下該怎麼做。但是,我不在此活動中使用任何圖像。我能做些什麼來診斷/嘗試解決這個問題?

+0

檢查Android文檔。我要出去肢體,並說你有一個相當大的圖像(https://developer.android.com/training/displaying-bitmaps/load-bitmap.html)。你可以(我可能會推薦)你使用像Glide,Fresco,UIL,PhotoView等圖像加載庫... – mastrgamr

+0

AWS的代碼試圖分配37440820字節=〜36MB。這不會可靠地工作。使用AWS提供的任何支持,向他們展示您的代碼和堆棧跟蹤。 – CommonsWare

回答

0

您可以在com.amazonaws.util.HttpUtils.urlEncode(HttpUtils.java:74)設置斷點, 然後運行的「調試應用程序」應用程序,並檢查非常大的字符串

+0

我不能這樣做,如果這是一個生產應用程序已簽署與我的Android工作室/開發密鑰不同的關鍵,​​但我可以嗎?我無法從平板電腦上卸載應用程序,因爲這意味着會丟失應用程序的數據。 – tom808

+0

好的。我認爲有一些選擇。 (1)更改軟件包名稱。然後執行「調試運行」(2)在另一臺設備上執行「調試運行」。 – nshmura

相關問題