Enable largeHeap in Obsidian Android app to avoid OOMs

Request

Please add the following to AndroidManifest.xml:

android:largeHeap="true"

Why I’m asking

On many Android devices the heap size allocated to an app is too small, and out-of-memory (OOM) errors can occur when processing large files. In the worst case (for example, if heavy work is scheduled after onLayoutReady), the app can enter a crash loop. When that happens users must either reinstall the app or perform a cumbersome workaround such as shifting the device time in the background to make the brief Safe Mode button appear and then tap it.

Of course, there are partial workarounds: enabling JIT on iOS/iPadOS, or editing/spoofing build.prop on Android. However, these approaches generally require modifying the device, are risky, and are not appropriate for ordinary users. They are not things we can reasonably recommend to users.

Is there any reason this change would not be considered?
Thank you.

Here are some additional details.

Examples

In addition to Wasm loading failures in my plugin Typst Mate #Issue15, OOMs have been reported, for example, in Obsidian Git #Issue877 and likely in Obsidian Excalidraw #Issue863.

Log

I created a new Vault on a regular Android device (stock Android environment) and installed only BRAT and my plugin. When I started loading the Wasm, I got the following output:

I md.obsidian: Forcing collection of SoftReferences for 90MB allocation
I md.obsidian: Alloc concurrent mark compact GC freed 64KB AllocSpace bytes, 0(0B) LOS objects, 14% free, 146MB/170MB, paused 61us,356us total 16.746ms
W md.obsidian: Throwing OutOfMemoryError "Failed to allocate a 95057000 byte allocation with 25133056 free bytes and 45MB until OOM, target footprint 179100112, growth limit 201326592" (VmSize 34130456 kB)
E AndroidRuntime: FATAL EXCEPTION: pool-10-thread-1
E AndroidRuntime: Process: md.obsidian, PID: 12378
E AndroidRuntime: java.lang.OutOfMemoryError: Failed to allocate a 95057000 byte allocation with 25133056 free bytes and 45MB until OOM, target footprint 179100112, growth limit 201326592

There were only about 25 MB of free space and the heap growth limit was only 45 MB.

This is not something that can be fixed by optimizing the Wasm. If plugins such as Obsidian Git or Obsidian Excalidraw need to work around this, they would be forced to think about memory safety and allocations far more strictly than is typical for normal TypeScript development.

I apologize for the wrong category.

I have become a Basic user, so I will add a link:

Option

More details about the option android:largeHeap are available on the Android Developers site: Android Developers – <application> (App manifest file).

Examples

My partner and I are hitting this issue as well this week. Here’s one full set of logs from a crash loop on app start.

$ adb logcat | grep -iE "(AndroidRuntime|md.obsidian)"

11-30 02:40:31.115  1635  2494 V WindowManager: DesktopModeLaunchParamsModifier: phase= 0 task=null activity=ActivityRecord{186010958 u0 md.obsidian/.MainActivity display-area-from-source=DefaultTaskDisplayArea@148684207 display-id=0 task-display-area-windowing-mode=1 suggested-display-area=DefaultTaskDisplayArea@148684207 task null, skipping
11-30 02:40:31.115  1635  2494 V WindowManager: TaskLaunchParamsModifier:phase=0 task=null activity=ActivityRecord{186010958 u0 md.obsidian/.MainActivity t-1} display-area-from-source=DefaultTaskDisplayArea@148684207 display-id=0 task-display-area-windowing-mode=1 suggested-display-area=DefaultTaskDisplayArea@148684207
11-30 02:40:31.115  1635  2494 V WindowManager: DesktopModeLaunchParamsModifier: phase= 3 task=null activity=ActivityRecord{186010958 u0 md.obsidian/.MainActivity t-1} display-area-from-source=DefaultTaskDisplayArea@148684207 display-id=0 task-display-area-windowing-mode=1 suggested-display-area=DefaultTaskDisplayArea@148684207 task null, skipping
11-30 02:40:31.115  1635  2494 V WindowManager: TaskLaunchParamsModifier:phase=3 task=null activity=ActivityRecord{186010958 u0 md.obsidian/.MainActivity t-1} display-area-from-source=DefaultTaskDisplayArea@148684207 display-id=0 task-display-area-windowing-mode=1 suggested-display-area=DefaultTaskDisplayArea@148684207 inherit-from-source=fullscreen non-freeform-task-display-area display-area=DefaultTaskDisplayArea@148684207 default-portrait freeform-size-mismatch=Rect(277, 689 - 803, 1769)
11-30 02:40:31.119  1635  2494 V WindowManager: DesktopModeLaunchParamsModifier: phase= 3 task=Task{c60de6f #8089 type=standard A=10382:md.obsidian} activity=ActivityRecord{186010958 u0 md.obsidian/.MainActivity t-1} display-area-from-source=DefaultTaskDisplayArea@148684207 display-id=0 task-display-area-windowing-mode=1 suggested-display-area=DefaultTaskDisplayArea@148684207 not entering desktop mode, skipping
11-30 02:40:31.119  1635  2494 V WindowManager: TaskLaunchParamsModifier:phase=3 task=Task{c60de6f #8089 type=standard A=10382:md.obsidian} activity=ActivityRecord{186010958 u0 md.obsidian/.MainActivity t-1} display-area-from-source=DefaultTaskDisplayArea@148684207 display-id=0 task-display-area-windowing-mode=1 suggested-display-area=DefaultTaskDisplayArea@148684207 inherit-from-source=fullscreen non-freeform-task-display-area display-area=DefaultTaskDisplayArea@148684207 default-portrait freeform-size-mismatch=Rect(277, 689 - 803, 1769)
11-30 02:40:31.122  1635  2494 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 xflg=0x4 pkg=md.obsidian cmp=md.obsidian/.MainActivity} with LAUNCH_SINGLE_TASK from uid 10171 (com.android.vending) (sr=263514656) (BAL_ALLOW_VISIBLE_WINDOW) result code=0
11-30 02:40:31.123  2191  2216 V WindowManagerShell: Transition requested (#480): android.os.BinderProxy@687b55f TransitionRequestInfo { type = OPEN, triggerTask = TaskInfo{userId=0 taskId=8089 effectiveUid=10382 displayId=0 isRunning=true baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=md.obsidian cmp=md.obsidian/.MainActivity } baseActivity=ComponentInfo{md.obsidian/md.obsidian.MainActivity} topActivity=ComponentInfo{md.obsidian/md.obsidian.MainActivity} origActivity=null realActivity=ComponentInfo{md.obsidian/md.obsidian.MainActivity} numActivities=1 lastActiveTime=38345431 supportsMultiWindow=true resizeMode=2 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{android.os.BinderProxy@7855bac} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 121 - 0, 0) topActivityInfo=ActivityInfo{8bea075 md.obsidian.MainActivity} launchCookies=[] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=false isVisible=false isVisibleRequested=false isTopActivityNoDisplay=false isSleeping=false locusId=null displayAreaFeatureId=1 isTopActivityTransparent=false isActivityStackTransparent=false lastNonFullscreenBounds=Rect(277, 689 - 803, 1769) capturedLink=null capturedLinkTimestamp=0 requestedVisibleTypes=-9 topActivityRequestOpenInBrowserEducationTimestamp=0 appCompatTaskInfo=AppCompatTaskInfo { topActivityInSizeCompat=false eligibleForLetterboxEducation= false isLetterboxEducationEnabled= false isLetterboxDoubleTapEnabled= false eligibleForUserAspectRatioButton= false topActivityBoundsLetterboxed= false isFromLetterboxDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=-1 topActivityLetterboxHeight=-1 topActivityAppBounds=Rect(0, 0 - 1080, 2400) isUserFullscreenOverrideEnabled=false isSystemFullscreenOverrideEnabled=false hasMinAspectRatioOverride=false topActivityLetterboxBounds=null cameraCompatTaskInfo=CameraCompatTaskInfo { freeformCameraCompatMode=inactiveundefined} topNonResizableActivityAspectRatio=-1.0} topActivityMainWindowFrame=null isAppBubble=false}, pipChange = null, remoteTransition = null, displayChange = null, flags = 0, debugId = 480 }
11-30 02:40:31.140  1635  1760 I ActivityManager: Start proc 30624:md.obsidian/u0a382 for next-top-activity {md.obsidian/md.obsidian.MainActivity}
11-30 02:40:31.148 30624 30624 I Zygote  : Process 30624 crated for md.obsidian
11-30 02:40:31.149 30624 30624 I md.obsidian: Using CollectorTypeCMC GC.
11-30 02:40:31.149  1635  1717 D CoreBackPreview: Window{6aab826 u0 Splash Screen md.obsidian}: Setting back callback OnBackInvokedCallbackInfo{mCallback=android.window.IOnBackInvokedCallback$Stub$Proxy@5ec415f, mPriority=0, mIsAnimationCallback=false, mOverrideBehavior=0}
11-30 02:40:31.151 30624 30624 E md.obsidian: Not starting debugger since process cannot load the jdwp agent.
11-30 02:40:31.161  1635  1741 V WindowManager: Sent Transition (#480) createdAt=11-30 02:40:31.114 via request=TransitionRequestInfo { type = OPEN, triggerTask = TaskInfo{userId=0 taskId=8089 effectiveUid=10382 displayId=0 isRunning=true baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=md.obsidian cmp=md.obsidian/.MainActivity } baseActivity=ComponentInfo{md.obsidian/md.obsidian.MainActivity} topActivity=ComponentInfo{md.obsidian/md.obsidian.MainActivity} origActivity=null realActivity=ComponentInfo{md.obsidian/md.obsidian.MainActivity} numActivities=1 lastActiveTime=38345431 supportsMultiWindow=true resizeMode=2 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{RemoteToken{9bd947b Task{c60de6f #8089 type=standard A=10382:md.obsidian}}} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 121 - 0, 0) topActivityInfo=ActivityInfo{b17e298 md.obsidian.MainActivity} launchCookies=[] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=false isVisible=false isVisibleRequested=false isTopActivityNoDisplay=false isSleeping=false locusId=null displayAreaFeatureId=1 isTopActivityTransparent=false isActivityStackTransparent=false lastNonFullscreenBounds=Rect(277, 689 - 803, 1769) capturedLink=null capturedLinkTimestamp=0 requestedVisibleTypes=-9 topActivityRequestOpenInBrowserEducationTimestamp=0 appCompatTaskInfo=AppCompatTaskInfo { topActivityInSizeCompat=false eligibleForLetterboxEducation= false isLetterboxEducationEnabled= false isLetterboxDoubleTapEnabled= false eligibleForUserAspectRatioButton= false topActivityBoundsLetterboxed= false isFromLetterboxDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=-1 topActivityLetterboxHeight=-1 topActivityAppBounds=Rect(0, 0 - 1080, 2400) isUserFullscreenOverrideEnabled=false isSystemFullscreenOverrideEnabled=false hasMinAspectRatioOverride=false topActivityLetterboxBounds=null cameraCompatTaskInfo=CameraCompatTaskInfo { freeformCameraCompatMode=inactiveundefined} topNonResizableActivityAspectRatio=-1.0} topActivityMainWindowFrame=null isAppBubble=false}, pipChange = null, remoteTransition = null, displayChange = null, flags = 0, debugId = 480 }
11-30 02:40:31.162  1635  1741 V WindowManager:         {WCT{RemoteToken{9bd947b Task{c60de6f #8089 type=standard A=10382:md.obsidian}}} m=OPEN f=NONE leash=Surface(name=Task=8089)/@0xffcf7ac sb=Rect(0, 0 - 1080, 2400) eb=Rect(0, 0 - 1080, 2400) epz=Point(1080, 2400) d=0 taskParent=-1 winMode=1},
11-30 02:40:31.176 30624 30624 W md.obsidian: Failed to find entry 'classes.dex': Entry not found
11-30 02:40:31.176 30624 30624 W md.obsidian: Failed to find entry 'classes.dex': Entry not found
11-30 02:40:31.176 30624 30624 W md.obsidian: Failed to find entry 'classes.dex': Entry not found
11-30 02:40:31.177 30624 30624 W md.obsidian: Failed to find entry 'classes.dex': Entry not found
11-30 02:40:31.178 30624 30624 D nativeloader: Configuring clns-9 for other apk /data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/base.apk:/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/split_config.arm64_v8a.apk:/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/split_config.en.apk:/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/split_config.es.apk:/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/split_config.xxhdpi.apk. target_sdk_version=35, uses_libraries=, library_path=/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/lib/arm64:/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/base.apk!/lib/arm64-v8a:/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/split_config.arm64_v8a.apk!/lib/arm64-v8a:/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/split_config.en.apk!/lib/arm64-v8a:/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7
11-30 02:40:31.182 30624 30624 V GraphicsEnvironment: md.obsidian is not listed in per-application setting
11-30 02:40:31.182 30624 30624 V GraphicsEnvironment: md.obsidian is not listed in ANGLE allowlist or settings, returning default
11-30 02:40:31.192 30624 30638 D vulkan  : searching for layers in '/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/lib/arm64'
11-30 02:40:31.192 30624 30638 D vulkan  : searching for layers in '/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/base.apk!/lib/arm64-v8a'
11-30 02:40:31.192 30624 30638 D vulkan  : searching for layers in '/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/split_config.arm64_v8a.apk!/lib/arm64-v8a'
11-30 02:40:31.192 30624 30638 D vulkan  : searching for layers in '/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/split_config.en.apk!/lib/arm64-v8a'
11-30 02:40:31.192 30624 30638 D vulkan  : searching for layers in '/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/split_config.es.apk!/lib/arm64-v8a'
11-30 02:40:31.193 30624 30638 D vulkan  : searching for layers in '/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/split_config.xxhdpi.apk!/lib/arm64-v8a'
11-30 02:40:31.207 30624 30624 W md.obsidian: Failed to find entry 'classes.dex': Entry not found
11-30 02:40:31.265  1635  1760 I ActivityManager: Start proc 30660:com.google.android.webview:sandboxed_process0:org.chromium.content.app.SandboxedProcessService0:0/u0i362 for  {md.obsidian/org.chromium.content.app.SandboxedProcessService0:0}
11-30 02:40:31.326 30624 30624 D nativeloader: Load /data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/split_config.arm64_v8a.apk!/lib/arm64-v8a/libfs.so using class loader ns clns-9 (caller=/data/app/~~Bq4L7ssS1I3SjPCLp9zAbg==/md.obsidian-fNgbvImqA7KWW88BpPzkGw==/base.apk): ok
11-30 02:40:31.413  1635  4859 D CoreBackPreview: Window{a302b91 u0 md.obsidian/md.obsidian.MainActivity}: Setting back callback OnBackInvokedCallbackInfo{mCallback=android.window.IOnBackInvokedCallback$Stub$Proxy@214663d, mPriority=0, mIsAnimationCallback=false, mOverrideBehavior=0}
11-30 02:40:32.320  1635  1741 I ActivityTaskManager: Displayed md.obsidian/.MainActivity for user 0: +1s199ms
11-30 02:40:32.404  1635  2059 I ImeTracker: md.obsidian:33a741aa: onRequestHide at ORIGIN_SERVER reason HIDE_UNSPECIFIED_WINDOW fromUser false
11-30 02:40:32.405 30624 30624 I ImeTracker: md.obsidian:33a741aa: onCancelled at PHASE_CLIENT_ALREADY_HIDDEN
11-30 02:40:32.410  3567  3567 I GoogleInputMethodService: GoogleInputMethodService.onStartInput():1347 onStartInput(EditorInfo{EditorInfo{packageName=md.obsidian, inputType=0, inputTypeString=NULL, enableLearning=false, autoCorrection=false, autoComplete=false, imeOptions=12000000, privateImeOptions=null, actionName=UNSPECIFIED, actionLabel=null, initialSelStart=-1, initialSelEnd=-1, initialCapsMode=0, label=null, fieldId=0, fieldName=null, extras=null, hintText=null, hintLocales=[]}}, false)
11-30 02:40:32.411  1635  4859 W PackageConfigPersister: App-specific configuration not found for packageName: md.obsidian and userId: 0
11-30 02:40:32.690  1635  2494 D CoreBackPreview: Window{6aab826 u0 Splash Screen md.obsidian EXITING}: Setting back callback null
11-30 02:40:36.625 30624 30752 D ProfileInstaller: Installing profile for md.obsidian
11-30 02:40:54.374 30624 30771 I md.obsidian: Starting a blocking GC Alloc
11-30 02:40:54.388 30624 30771 I md.obsidian: Alloc young concurrent mark compact GC freed 220KB AllocSpace bytes, 0(0B) LOS objects, 58% free, 67MB/163MB, paused 246us,1.133ms total 13.721ms
11-30 02:40:54.389 30624 30771 I md.obsidian: Forcing collection of SoftReferences for 128MB allocation
11-30 02:40:54.407 30624 30771 I md.obsidian: Alloc concurrent mark compact GC freed 76KB AllocSpace bytes, 0(0B) LOS objects, 58% free, 67MB/163MB, paused 159us,725us total 18.814ms
11-30 02:40:54.409 30624 30771 W md.obsidian: Throwing OutOfMemoryError "Failed to allocate a 134217740 byte allocation with 100597760 free bytes and 188MB until OOM, target footprint 171612672, growth limit 268435456" (VmSize 35389816 kB)
11-30 02:40:56.758 30624 30629 I md.obsidian: Background young concurrent mark compact GC freed 124KB AllocSpace bytes, 0(0B) LOS objects, 0% free, 195MB/195MB, paused 238us,827us total 2.347s
11-30 02:40:57.061 30624 30771 I md.obsidian: Waiting for a blocking GC Alloc
11-30 02:40:57.147 30624 30629 I md.obsidian: Background concurrent mark compact GC freed 288KB AllocSpace bytes, 1(64MB) LOS objects, 42% free, 131MB/227MB, paused 97us,552us total 386.451ms
11-30 02:40:57.148 30624 30771 I md.obsidian: WaitForGcToComplete blocked Alloc on Background for 86.875ms
11-30 02:40:57.148 30624 30771 I md.obsidian: Forcing collection of SoftReferences for 256MB allocation
11-30 02:40:59.554 30624 30771 I md.obsidian: Alloc concurrent mark compact GC freed 132KB AllocSpace bytes, 0(0B) LOS objects, 42% free, 131MB/227MB, paused 215us,909us total 2.405s
11-30 02:40:59.554 30624 30771 W md.obsidian: Throwing OutOfMemoryError "Failed to allocate a 268435468 byte allocation with 100663296 free bytes and 124MB until OOM, target footprint 238717440, growth limit 268435456" (VmSize 35389956 kB)
11-30 02:40:59.554 30624 30771 I md.obsidian: Starting a blocking GC Alloc
11-30 02:40:59.935 30624 30771 I md.obsidian: Alloc young concurrent mark compact GC freed 32KB AllocSpace bytes, 0(0B) LOS objects, 42% free, 131MB/227MB, paused 85us,448us total 381.078ms
11-30 02:40:59.935 30624 30771 I md.obsidian: Forcing collection of SoftReferences for 256MB allocation
11-30 02:41:01.584 30624 30771 I md.obsidian: Alloc concurrent mark compact GC freed 0B AllocSpace bytes, 0(0B) LOS objects, 42% free, 131MB/227MB, paused 97us total 1.648s
11-30 02:41:01.584 30624 30771 W md.obsidian: Throwing OutOfMemoryError "Failed to allocate a 268435472 byte allocation with 100663296 free bytes and 124MB until OOM, target footprint 238717440, growth limit 268435456" (VmSize 35319876 kB)
11-30 02:41:01.586 30624 30771 E AndroidRuntime: FATAL EXCEPTION: pool-11-thread-1
11-30 02:41:01.586 30624 30771 E AndroidRuntime: Process: md.obsidian, PID: 30624
11-30 02:41:01.586 30624 30771 E AndroidRuntime: java.lang.OutOfMemoryError: Failed to allocate a 268435472 byte allocation with 100663296 free bytes and 124MB until OOM, target footprint 238717440, growth limit 268435456
11-30 02:41:01.586 30624 30771 E AndroidRuntime: 	at java.util.Arrays.copyOf(Arrays.java:3785)
11-30 02:41:01.586 30624 30771 E AndroidRuntime: 	at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:120)
11-30 02:41:01.586 30624 30771 E AndroidRuntime: 	at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:95)
11-30 02:41:01.586 30624 30771 E AndroidRuntime: 	at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:156)
11-30 02:41:01.586 30624 30771 E AndroidRuntime: 	at com.capacitorjs.plugins.app.AppPlugin.requestUrlAndroid(SourceFile:176)
11-30 02:41:01.586 30624 30771 E AndroidRuntime: 	at com.capacitorjs.plugins.app.AppPlugin.lambda$requestUrl$3(SourceFile:38)
11-30 02:41:01.586 30624 30771 E AndroidRuntime: 	at com.capacitorjs.plugins.app.AppPlugin.r(SourceFile:1)
11-30 02:41:01.586 30624 30771 E AndroidRuntime: 	at com.capacitorjs.plugins.app.d.run(SourceFile:1)
11-30 02:41:01.586 30624 30771 E AndroidRuntime: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
11-30 02:41:01.586 30624 30771 E AndroidRuntime: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
11-30 02:41:01.586 30624 30771 E AndroidRuntime: 	at java.lang.Thread.run(Thread.java:1119)
11-30 02:41:01.594  1635  1718 W ActivityTaskManager:   Force finishing activity md.obsidian/.MainActivity
11-30 02:41:01.601  2191  2216 V WindowManagerShell: Transition requested (#481): android.os.BinderProxy@3e4bcdf TransitionRequestInfo { type = CLOSE, triggerTask = TaskInfo{userId=0 taskId=8089 effectiveUid=10382 displayId=0 isRunning=true baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=md.obsidian cmp=md.obsidian/.MainActivity } baseActivity=ComponentInfo{md.obsidian/md.obsidian.MainActivity} topActivity=ComponentInfo{md.obsidian/md.obsidian.MainActivity} origActivity=null realActivity=ComponentInfo{md.obsidian/md.obsidian.MainActivity} numActivities=1 lastActiveTime=38345498 supportsMultiWindow=true resizeMode=2 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{android.os.BinderProxy@7855bac} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 0 - 0, 0) topActivityInfo=ActivityInfo{d6a8d2c md.obsidian.MainActivity} launchCookies=[] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=true isVisible=true isVisibleRequested=true isTopActivityNoDisplay=false isSleeping=false locusId=null displayAreaFeatureId=1 isTopActivityTransparent=false isActivityStackTransparent=false lastNonFullscreenBounds=Rect(277, 689 - 803, 1769) capturedLink=null capturedLinkTimestamp=0 requestedVisibleTypes=-9 topActivityRequestOpenInBrowserEducationTimestamp=0 appCompatTaskInfo=AppCompatTaskInfo { topActivityInSizeCompat=false eligibleForLetterboxEducation= false isLetterboxEducationEnabled= false isLetterboxDoubleTapEnabled= false eligibleForUserAspectRatioButton= false topActivityBoundsLetterboxed= false isFromLetterboxDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=-1 topActivityLetterboxHeight=-1 topActivityAppBounds=Rect(0, 0 - 1080, 2400) isUserFullscreenOverrideEnabled=false isSystemFullscreenOverrideEnabled=false hasMinAspectRatioOverride=false topActivityLetterboxBounds=null cameraCompatTaskInfo=CameraCompatTaskInfo { freeformCameraCompatMode=inactiveundefined} topNonResizableActivityAspectRatio=-1.0} topActivityMainWindowFrame=null isAppBubble=false}, pipChange = null, remoteTransition = null, displayChange = null, flags = 16, debugId = 481 }
11-30 02:41:01.702  1635  1718 I ActivityManager: Process md.obsidian (pid 30624) has died: fg  TOP
11-30 02:41:01.702  1635  4866 I WindowManager: WIN DEATH: Window{a302b91 u0 md.obsidian/md.obsidian.MainActivity}
11-30 02:41:01.703  1635  2005 I ImeTracker: md.obsidian:ad808192: onRequestHide at ORIGIN_SERVER reason HIDE_REMOVE_CLIENT fromUser false
11-30 02:41:01.703  1635  2005 I ImeTracker: md.obsidian:ad808192: onCancelled at PHASE_SERVER_SHOULD_HIDE
11-30 02:41:01.760  1635  1741 V WindowManager: Sent Transition (#481) createdAt=11-30 02:41:01.594 via request=TransitionRequestInfo { type = CLOSE, triggerTask = TaskInfo{userId=0 taskId=8089 effectiveUid=10382 displayId=0 isRunning=true baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=md.obsidian cmp=md.obsidian/.MainActivity } baseActivity=ComponentInfo{md.obsidian/md.obsidian.MainActivity} topActivity=ComponentInfo{md.obsidian/md.obsidian.MainActivity} origActivity=null realActivity=ComponentInfo{md.obsidian/md.obsidian.MainActivity} numActivities=1 lastActiveTime=38345498 supportsMultiWindow=true resizeMode=2 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{RemoteToken{9bd947b Task{c60de6f #8089 type=standard A=10382:md.obsidian}}} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 0 - 0, 0) topActivityInfo=ActivityInfo{b17e298 md.obsidian.MainActivity} launchCookies=[] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=true isVisible=true isVisibleRequested=true isTopActivityNoDisplay=false isSleeping=false locusId=null displayAreaFeatureId=1 isTopActivityTransparent=false isActivityStackTransparent=false lastNonFullscreenBounds=Rect(277, 689 - 803, 1769) capturedLink=null capturedLinkTimestamp=0 requestedVisibleTypes=-9 topActivityRequestOpenInBrowserEducationTimestamp=0 appCompatTaskInfo=AppCompatTaskInfo { topActivityInSizeCompat=false eligibleForLetterboxEducation= false isLetterboxEducationEnabled= false isLetterboxDoubleTapEnabled= false eligibleForUserAspectRatioButton= false topActivityBoundsLetterboxed= false isFromLetterboxDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=-1 topActivityLetterboxHeight=-1 topActivityAppBounds=Rect(0, 0 - 1080, 2400) isUserFullscreenOverrideEnabled=false isSystemFullscreenOverrideEnabled=false hasMinAspectRatioOverride=false topActivityLetterboxBounds=null cameraCompatTaskInfo=CameraCompatTaskInfo { freeformCameraCompatMode=inactiveundefined} topNonResizableActivityAspectRatio=-1.0} topActivityMainWindowFrame=null isAppBubble=false}, pipChange = null, remoteTransition = null, displayChange = null, flags = 16, debugId = 481 }
11-30 02:41:01.760  1635  1741 V WindowManager:         {WCT{RemoteToken{9bd947b Task{c60de6f #8089 type=standard A=10382:md.obsidian}}} m=CLOSE f=NONE leash=Surface(name=Task=8089)/@0xffcf7ac sb=Rect(0, 0 - 1080, 2400) eb=Rect(0, 0 - 1080, 2400) epz=Point(1080, 2400) d=0 taskParent=-1 winMode=1}
11-30 02:41:02.293  1635  2018 W WindowManager: Exception thrown during dispatchAppVisibility Window{a302b91 u0 md.obsidian/md.obsidian.MainActivity EXITING}