Skip to content

Commit bca1271

Browse files
authored
fix(android): Fatal Exception: java.lang.OutOfMemoryError (#8061) (#8098)
Crashlytics: **Async.java line 181** **org.nativescript.widgets.Async$Image$DownloadImageTask.doInBackground** ``` Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate a 3601932 byte allocation with 970044 free bytes and 947KB until OOM at dalvik.system.VMRuntime.newNonMovableArray(VMRuntime.java) at android.graphics.BitmapFactory.nativeDecodeStream(BitmapFactory.java) at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:863) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:839) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:877) at org.nativescript.widgets.Async$Image$DownloadImageTask.doInBackground(Async.java:181) at org.nativescript.widgets.Async$Image$4.run(Async.java:157) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at org.nativescript.widgets.Async$PriorityThreadFactory$1.run(Async.java:86) at java.lang.Thread.run(Thread.java:818) ``` Crashlytics **Async.java line 473** **org.nativescript.widgets.Async$Http$RequestResult.readResponseStream** ``` Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate a 3000012 byte allocation with 2043950 free bytes and 1996KB until OOM at dalvik.system.VMRuntime.newNonMovableArray(VMRuntime.java) at android.graphics.BitmapFactory.nativeDecodeByteArray(BitmapFactory.java) at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:744) at org.nativescript.widgets.Async$Http$RequestResult.readResponseStream(Async.java:473) at org.nativescript.widgets.Async$Http$HttpRequestTask.doInBackground(Async.java:555) at org.nativescript.widgets.Async$Http$1.run(Async.java:307) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at org.nativescript.widgets.Async$PriorityThreadFactory$1.run(Async.java:86) at java.lang.Thread.run(Thread.java:818) ``` ## PR Checklist - [x] The PR title follows our guidelines: https://github.com/NativeScript/NativeScript/blob/master/CONTRIBUTING.md#commit-messages. - [x] There is an issue for the bug/feature this PR is for. To avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it. - [x] You have signed the [CLA](http://www.nativescript.org/cla). - [x] All existing tests are passing: https://github.com/NativeScript/NativeScript/blob/master/DevelopmentWorkflow.md#running-unit-tests. - [ ] Tests for the changes are included - https://github.com/NativeScript/NativeScript/blob/master/WritingUnitTests.md. ## What is the current behavior? Uncaught exception resulting in crash. This was introduced in v6.2.0. ## What is the new behavior? Additional `catch` block for uncaught exception type `OutOfMemoryError` Fixes: https://www.telerik.com/account/support-tickets/view-ticket/1436458
1 parent 1528498 commit bca1271

1 file changed

Lines changed: 4 additions & 7 deletions

File tree

  • tns-core-modules-widgets/android/widgets/src/main/java/org/nativescript/widgets

‎tns-core-modules-widgets/android/widgets/src/main/java/org/nativescript/widgets/Async.java‎

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,8 @@ protected Bitmap doInBackground(String... params) {
180180
stream = new java.net.URL(params[0]).openStream();
181181
Bitmap bmp = BitmapFactory.decodeStream(stream);
182182
return bmp;
183-
} catch (MalformedURLException e) {
184-
Log.e(TAG, "Failed to decode stream, MalformedURLException: " + e.getMessage());
185-
return null;
186-
} catch (IOException e) {
187-
Log.e(TAG, "Failed to decode stream, IOException: " + e.getMessage());
183+
} catch (Throwable t) {
184+
Log.e(TAG, "Failed to decode stream, Throwable: " + t.getMessage());
188185
return null;
189186
} finally {
190187
if (stream != null) {
@@ -472,8 +469,8 @@ public void readResponseStream(HttpURLConnection connection, Stack<Closeable> op
472469
bitmapOptions.inSampleSize = scale;
473470
this.responseAsImage = BitmapFactory.decodeByteArray(responseStream.buf(), 0, responseStream.size(), bitmapOptions);
474471
}
475-
} catch (Exception e) {
476-
Log.e(TAG, "Failed to decode byte array, Exception: " + e.getMessage());
472+
} catch (Throwable t) {
473+
Log.e(TAG, "Failed to decode byte array, Throwable: " + t.getMessage());
477474
}
478475

479476
if (this.responseAsImage == null) {

0 commit comments

Comments
 (0)