You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI应用仅在Android发布模式切换侧边栏时崩溃(android.os.DeadObjectException)

MAUI应用Android Release模式切换侧边栏页面崩溃问题

问题现象

  • 实体Android设备(Samsung SM-A546E)上测试MAUI应用,仅Release模式下切换侧边栏(FlyoutMenu)中两个特定页面时崩溃,Debug模式运行正常,其余侧边栏页面切换无异常。
  • 初始崩溃无错误提示,仅通过Logcat捕获到关键日志。

已尝试操作

  • 删除项目obj和bin文件夹
  • 清理并重建项目

Logcat关键日志

时间    设备名称    类型    PID 标签 消息
03-31 10:39:49.845  Samsung SM-A546E    Verbose 1310    WindowManager   设置窗口{d8681d9 u0 com.engelberthdeveloping.passwortapp/crc6451514aa4f2d5798b.MainActivity EXITING}的可见性为false,调用者=com.android.server.wm.WindowContainer.sendAppVisibilityToClients:1281 com.android.server.wm.WindowToken.setClientVisible:447 com.android.server.wm.ActivityRecord.setClientVisible:7988 com.android.server.wm.ActivityRecord.postApplyAnimation:6593 com.android.server.wm.ActivityRecord.commitVisibility:6536 

时间    设备名称    类型    PID 标签 消息
03-31 10:39:49.845  Samsung SM-A546E    Warning 1310    WindowManager   分发窗口可见性时抛出异常 Window{d8681d9 u0 com.engelberthdeveloping.passwortapp/crc6451514aa4f2d5798b.MainActivity EXITING}

时间    设备名称    类型    PID 标签 消息
03-31 10:39:49.845  Samsung SM-A546E    Warning 1310    WindowManager   android.os.DeadObjectException
    at android.os.BinderProxy.transactNative(Native Method)
    at android.os.BinderProxy.transact(BinderProxy.java:662)
    at android.view.IWindow$Stub$Proxy.dispatchAppVisibility(IWindow.java:631)
    at com.android.server.wm.WindowState.sendAppVisibilityToClients(WindowState.java:3982)
    at com.android.server.wm.WindowContainer.sendAppVisibilityToClients(WindowContainer.java:1281)
    at com.android.server.wm.WindowToken.setClientVisible(WindowToken.java:447)
    at com.android.server.wm.ActivityRecord.setClientVisible(ActivityRecord.java:7988)
    at com.android.server.wm.ActivityRecord.postApplyAnimation(ActivityRecord.java:6593)
    at com.android.server.wm.ActivityRecord.commitVisibility(ActivityRecord.java:6536)
    at com.android.server.wm.Transition.finishTransition(Transition.java:1400)
    at com.android.server.wm.TransitionController.finishTransition(TransitionController.java:1036)
    at com.android.server.wm.WindowOrganizerController.finishTransition(WindowOrganizerController.java:429)
    at android.window.IWindowOrganizerController$Stub.onTransact(IWindowOrganizerController.java:286)
    at com.android.server.wm.WindowOrganizerController.onTransact(WindowOrganizerController.java:207)
    at android.os.Binder.execTransactInternal(Binder.java:1380)

    at android.os.Binder.execTransact(Binder.java:1311)

时间    设备名称    类型    PID 标签 消息
03-31 10:39:49.845  Samsung SM-A546E    Info    1310    Process 发送信号。PID: 28268 SIG: 9

时间    设备名称    类型    PID 标签 消息
03-31 10:39:49.846  Samsung SM-A546E    Verbose 1310    WindowManager   移除窗口{d8681d9 u0 com.engelberthdeveloping.passwortapp/crc6451514aa4f2d5798b.MainActivity EXITING}: mSurfaceController=Surface(name=com.engelberthdeveloping.passwortapp/crc6451514aa4f2d5798b.MainActivity$_28268)/@0x3fdc60a mAnimatingExit=true mRemoveOnExit=true mHasSurface=true surfaceShowing=true animating=false app-animation=false mDisplayFrozen=false 调用者=com.android.server.wm.WindowToken.removeAllWindowsIfPossible:258 com.android.server.wm.ActivityRecord.removeIfPossible:5063 com.android.server.wm.ActivityRecord.handleCompleteDeferredRemoval:5070 com.android.server.wm.WindowContainer.handleCompleteDeferredRemoval:1456 com.android.server.wm.TaskFragment.handleCompleteDeferredRemoval:3345 com.android.server.wm.WindowContainer.handleCompleteDeferredRemoval:1456 

时间    设备名称    类型    PID 标签 消息
03-31 10:39:49.847  Samsung SM-A546E    Info    1310    WindowManager   销毁Surface Surface(name=com.engelberthdeveloping.passwortapp/crc6451514aa4f2d5798b.MainActivity$_28268)/@0x3fdc60a,调用者=com.android.server.wm.WindowStateAnimator.destroySurface:789 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:472 com.android.server.wm.WindowState.removeImmediately:2904 com.android.server.wm.WindowState.removeIfPossible:3140 com.android.server.wm.WindowToken.removeAllWindowsIfPossible:258 com.android.server.wm.ActivityRecord.removeIfPossible:5063 com.android.server.wm.ActivityRecord.onRemovedFromDisplay:5145 com.android.server.wm.ActivityRecord.removeImmediately:5053 

分析与解决方案

核心原因

日志中的DeadObjectException说明系统尝试与已销毁的Binder对象通信,结合Release模式独有特性,大概率是代码混淆/裁剪错误优化页面组件,或**页面生命周期处理不当(如异步任务持有已释放的页面引用)**导致。

排查与修复步骤

  1. 调整ProGuard/R8混淆规则

    • 确保页面、ViewModel及依赖类未被错误混淆或移除,在Platforms/Android/proguard.cfg中添加:
      -keep class crc6451514aa4f2d5798b.** { *; }
      -keep class com.engelberthdeveloping.passwortapp.** { *; }
      -keep class Microsoft.Maui.Controls.** { *; }
      
    • 禁用R8过度激进的代码裁剪配置。
  2. 检查页面生命周期资源释放

    • 排查崩溃页面的OnDisappearing/OnDestroy方法,确保异步任务已终止、事件订阅已取消,避免持有页面实例引用引发内存异常。
    • 确认页面绑定的服务、资源在销毁时已正确释放。
  3. 启用Release模式调试

    • 在项目属性中,将Android Release配置的Debug symbols设为Full,勾选Enable developer instrumentation,附加调试器捕获具体崩溃点。
  4. 升级MAUI版本

    • 确认当前MAUI版本是否存在FlyoutMenu页面切换的已知bug,升级至最新稳定版尝试修复。

内容的提问来源于stack exchange,提问作者tengelberth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:27:10