Skip to content

OutOfMemoryError - Nextcloud crashes every time "Media" tab is opened #14932

@Mario-Hofstaetter

Description

@Mario-Hofstaetter

⚠️ Before posting ⚠️

  • This is a bug, not a question or an enhancement.
  • I've searched for similar issues and didn't find a duplicate.
  • I've written a clear and descriptive title for this issue, not just "Bug" or "Crash".
  • I agree to follow Nextcloud's Code of Conduct.

Steps to reproduce

  1. Open Nextcloud on Android
  2. Switch to "Media" Tab, app is lagging, a few pictures are loaded (sometimes), but the view is still loading and freezes,
  3. after about 30 sekunds the app crashes with Callstack shown
Screen_Recording_20250529_111337_Nextcloud.mp4

Expected behaviour

App must not crash

Actual behaviour

App is crashing repeatedly, reproducibly, every time.

I have now observed at least two different exception call stacks.

Android version

15

Device brand and model

Samsung Galaxy S23+

Stock or custom OS?

Stock

Nextcloud android app version

3.31.1 - installed from F-Droid due to the Google Permissions affair

Nextcloud server version

30.0.10

Using a reverse proxy?

I don't know

Android logs (via windows with adb.exe and logcat)

Github error Body can not be longer than 65536 characters, logs here: https://pastebin.com/azQgx3Gu

Server error logs

Server is a hosted instance by Hetzner, so no access to logs (?)

Additional information

  • Up until recently, the performance of media was "just" unusable, but app did not crash. I've now finished migrating my files to this server.
  • Stats:
    • ~122000 files in 1700 folders
    • ~ 4.64TB
  • "Memories" android app is still working

EDIT: Android logs added above.

Crash Info from within app (no touching)

Cause of error

Exception in thread "main" java.lang.OutOfMemoryError: Failed to allocate a 2064 byte allocation with 2076448 free bytes and 2027KB until OOM, target footprint 268435456, growth limit 268435456; giving up on allocation because <1% of heap free after GC.
    at com.google.gson.stream.JsonReader.<init>(JsonReader.java:261)
    at com.google.gson.Gson.newJsonReader(Gson.java:1078)
    at com.google.gson.Gson.fromJson(Gson.java:1261)
    at com.google.gson.Gson.fromJson(Gson.java:1171)
    at com.google.gson.Gson.fromJson(Gson.java:1107)
    at com.owncloud.android.datamodel.FileDataStorageManager.createFileInstance(FileDataStorageManager.java:1309)
    at com.owncloud.android.datamodel.FileDataStorageManager.getGalleryItems(FileDataStorageManager.java:2541)
    at com.owncloud.android.datamodel.FileDataStorageManager.getAllGalleryItems(FileDataStorageManager.java:2530)
    at com.owncloud.android.ui.adapter.GalleryAdapter.showAllGalleryItems(GalleryAdapter.kt:159)
    at com.owncloud.android.ui.fragment.GalleryFragment.showAllGalleryItems(GalleryFragment.java:401)
    at com.owncloud.android.ui.fragment.GalleryFragment.handleSearchEvent(GalleryFragment.java:246)
    at com.owncloud.android.ui.fragment.GalleryFragment.onActivityCreated(GalleryFragment.java:166)
    at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:3161)
    at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:639)
    at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:289)
    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2214)
    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2109)
    at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2052)
    at androidx.fragment.app.FragmentController.execPendingActions(FragmentController.java:496)
    at androidx.fragment.app.FragmentActivity.onResume(FragmentActivity.java:311)
    at com.owncloud.android.ui.activity.BaseActivity.onResume(BaseActivity.java:115)
    at com.owncloud.android.ui.activity.FileActivity.onResume(FileActivity.java:264)
    at com.owncloud.android.ui.activity.FileDisplayActivity.onResume(FileDisplayActivity.java:1226)
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1722)
    at android.app.Activity.performResume(Activity.java:9533)
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:5904)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:6007)
    at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:274)
    at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:250)
    at android.app.servertransaction.TransactionExecutor.executeNonLifecycleItem(TransactionExecutor.java:183)
    at android.app.servertransaction.TransactionExecutor.executeTransactionItems(TransactionExecutor.java:109)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:81)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2895)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loopOnce(Looper.java:257)
    at android.os.Looper.loop(Looper.java:342)
    at android.app.ActivityThread.main(ActivityThread.java:9634)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:619)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)

App information

  • ID: com.nextcloud.client
  • Version: 30310190
  • Build flavor: generic

Device information

  • Brand: samsung
  • Device: dm2q
  • Model: SM-S916B
  • Id: AP3A.240905.015.A2
  • Product: dm2qxeea

Firmware

  • SDK: 35
  • Release: 15
  • Incremental: S916BXXS8DYDB

Different Callstack, I touched the app while frozen while recording the screen video attached above

Exception in thread "main" java.lang.OutOfMemoryError: Failed to allocate a 24 byte allocation with 2494624 free bytes and 2436KB until OOM, target footprint 268435456, growth limit 268435456; giving up on allocation because <1% of heap free after GC.
    at java.lang.StringFactory.newStringFromChars(StringFactory.java:124)
    at com.google.gson.stream.JsonReader.nextQuotedValue(JsonReader.java:1090)
    at com.google.gson.stream.JsonReader.nextName(JsonReader.java:881)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:511)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
    at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:76)
    at com.google.gson.Gson.fromJson(Gson.java:1361)
    at com.google.gson.Gson.fromJson(Gson.java:1262)
    at com.google.gson.Gson.fromJson(Gson.java:1171)
    at com.google.gson.Gson.fromJson(Gson.java:1107)
    at com.owncloud.android.datamodel.FileDataStorageManager.createFileInstance(FileDataStorageManager.java:1297)
    at com.owncloud.android.datamodel.FileDataStorageManager.getGalleryItems(FileDataStorageManager.java:2541)
    at com.owncloud.android.datamodel.FileDataStorageManager.getAllGalleryItems(FileDataStorageManager.java:2530)
    at com.owncloud.android.ui.adapter.GalleryAdapter.showAllGalleryItems(GalleryAdapter.kt:159)
    at com.owncloud.android.ui.fragment.GalleryFragment.showAllGalleryItems(GalleryFragment.java:401)
    at com.owncloud.android.ui.fragment.GalleryFragment.handleSearchEvent(GalleryFragment.java:246)
    at com.owncloud.android.ui.fragment.GalleryFragment.onRefresh(GalleryFragment.java:217)
    at com.owncloud.android.ui.activity.FileActivity.refreshList(FileActivity.java:796)
    at com.owncloud.android.ui.activity.FileDisplayActivity.lambda$observeWorkerState$20(FileDisplayActivity.java:1747)
    at com.owncloud.android.ui.activity.FileDisplayActivity.$r8$lambda$dTn088xs0ZIZxumGcv-5JkrUGOw(Unknown Source:0)
    at com.owncloud.android.ui.activity.FileDisplayActivity$$ExternalSyntheticLambda20.onChanged(D8$$SyntheticClass:0)
    at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
    at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151)
    at androidx.lifecycle.LiveData.setValue(LiveData.java:309)
    at androidx.lifecycle.LiveData$1.run(LiveData.java:93)
    at android.os.Handler.handleCallback(Handler.java:959)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loopOnce(Looper.java:257)
    at android.os.Looper.loop(Looper.java:342)
    at android.app.ActivityThread.main(ActivityThread.java:9634)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:619)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions