getActivity / Toaster

Android 吐司框架,专治 Toast 各种疑难杂症
Apache License 2.0
3.2k stars 404 forks source link

[Bug]:Unable to add window android.view.ViewRootImpl$W@8265f91 -- the specified display can not be found #131

Closed cxincx closed 6 months ago

cxincx commented 7 months ago

框架版本【必填】

12.3

问题描述【必填】

最近出现了大量此异常,在添加全局悬浮窗toast时出现,均发生在Android 14设备上。

android.view.WindowManager$InvalidDisplayException Unable to add window android.view.ViewRootImpl$W@8265f91 -- the specified display can not be found android.view.ViewRootImpl.setView(ViewRootImpl.java:1752) android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:435) android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:324) android.view.WindowManagerImpl.addView(WindowManagerImpl.java:175) com.hjq.toast.ToastImpl$1.void run()(ToastImpl.java:0) com.hjq.toast.ToastImpl$1.void run$bridge()(ToastImpl.java:0) com.hjq.toast.ToastImpl.void show()(ToastImpl.java:0) com.hjq.toast.GlobalToast.void show()(GlobalToast.java:0) com.hjq.toast.ActivityToast.void show$bridge()(ActivityToast.java:0) com.hjq.toast.ToastStrategy$ShowToastRunnable.void run()(ToastStrategy.java:0)

复现步骤【必填】

bugly收集,暂无明确复现路径

是否必现【必填】

项目 targetSdkVersion【必填】

34

出现问题的手机信息【必填】

小米

出现问题的安卓版本【必填】

14

问题信息的来源渠道【必填】

Bugly 看到的

是部分机型还是所有机型都会出现【必答】

Android 14

框架最新的版本是否存在这个问题【必答】

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

是否可以通过 Demo 来复现该问题【必答】

提供报错堆栈

android.view.WindowManager$InvalidDisplayException
Unable to add window android.view.ViewRootImpl$W@8265f91 -- the specified display can not be found

android.view.ViewRootImpl.setView(ViewRootImpl.java:1752)
android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:435)
android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:324)
android.view.WindowManagerImpl.addView(WindowManagerImpl.java:175)
com.hjq.toast.ToastImpl$1.void run()(ToastImpl.java:0)
com.hjq.toast.ToastImpl$1.void run$bridge()(ToastImpl.java:0)
com.hjq.toast.ToastImpl.void show()(ToastImpl.java:0)
com.hjq.toast.GlobalToast.void show()(GlobalToast.java:0)
com.hjq.toast.ActivityToast.void show$bridge()(ActivityToast.java:0)
com.hjq.toast.ToastStrategy$ShowToastRunnable.void run()(ToastStrategy.java:0)

提供截图或视频

No response

提供解决方案

No response

getActivity commented 7 months ago

@cxincx 小伙子,你这是修改了我的框架代码吧?

cxincx commented 7 months ago

@getActivity 没有的,直接依赖的组件:api 'com.github.getActivity:Toaster:12.3'

getActivity commented 7 months ago
image

小伙子,我看了一下 12.3 版本的代码,ActivityToast 肯定是不会去调用 GlobalToast 的,不信你可以翻源码看一下。

image image
cxincx commented 7 months ago
image

小伙子,我看了一下 12.3 版本的代码,ActivityToast 肯定是不会去调用 GlobalToast 的,不信你可以翻源码看一下。

image image

那是bugly自动解析的问题,原始日志如下,调用的是GlobalToast的show,在mShowRunnable中出现的异常

android.view.WindowManager$InvalidDisplayException Unable to add window android.view.ViewRootImpl$W@913e4 -- the specified display can not be found android.view.ViewRootImpl.setView(ViewRootImpl.java:1733) android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:451) android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:325) android.view.WindowManagerImpl.addView(WindowManagerImpl.java:176) i5.i.run(SourceFile:93) i5.b.show(SourceFile:66)

cxincx commented 7 months ago

微信截图_20240206170422 被混淆的3行代码分别是:ToastStrategy#ShowToastRunnable -> GlobalToast#show -> ToastImpl#mShowRunnable,是直接依赖的组件,没有进行任何修改

getActivity commented 7 months ago

小伙子,从你目前提供的信息来分析,加上无法复现,我无法判断这个问题的具体原因,请提供更多的信息,例如:发生崩溃时的日志,复现步骤等等有用的信息。

cxincx commented 7 months ago

小伙子,从你目前提供的信息来分析,加上无法复现,我无法判断这个问题的具体原因,请提供更多的信息,例如:发生崩溃时的日志,复现步骤等等有用的信息。

确实没有明确的复现路径,更大概率是系统的BUG。目前该异常都是出现在Android 14的小米设备上,应该是小米澎湃在特定场景下会出现该问题,是否可以考虑先catch住?如果能更进一步,在出现特殊异常导致悬浮窗显示失败时使用系统toast代替就更好了

getActivity commented 7 months ago

@cxincx 小伙子,不是所有的崩溃都去 try catch,这样做崩溃数据是好看了,但同时问题也会被掩盖,这不是好的解决方案,另外从你刚刚的描述来分析,基本能确定是小米澎湃系统的 bug,我这边建议你先反馈给小米官方处理。

cxincx commented 7 months ago

两边都有反馈的,但系统进行排查和修复的周期会比较长,甚至可能不修复。由于该问题【已经】在线上出现,有上百台设备受影响,所以希望框架可以先兼容一下。catch并不是为了追求数据好看,而是不希望用户在操作过程中由于toast提示导致应用闪退,数据丢失的体验是非常糟糕的,希望可以采纳。

getActivity commented 7 months ago

Toaster-12.6-fix.aar.zip

getActivity commented 7 months ago

@cxincx 小伙子,你用上面的包应该可以解决你的燃眉之急,至于这个改动要不要纳入到主线分支中,我还得仔细斟酌一下。

cxincx commented 7 months ago

好的,谢谢

getActivity commented 7 months ago

@cxincx 小伙子,经过慎重考虑,最终还是不考虑将这个改动纳入到主线分支中,这是因为一旦对所有的异常进行 try catch,那么就引发另外一个问题,厂商的 Framework 工程师一些改动导致的崩溃,将会被掩盖,虽然应用不崩溃了,但是 Toast 不显示了同样是一个问题,如果应用不崩溃,那么将无法引起厂商的重视。

cxincx commented 7 months ago

@getActivity 可以考虑单独对 InvalidDisplayException 这个异常处理一下,不用全部catch

getActivity commented 6 months ago

@cxincx 小伙子,你提供一下这个 Bug 崩溃的情况,崩溃总次数、崩溃影响设备数、崩溃占比、崩溃趋势

getActivity commented 6 months ago

@cxincx 小伙子,你如果没办法提供这些数据,我将无法做出有效的决策。

getActivity commented 6 months ago

超过一个星期没有响应,自动关闭此 issue。