- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当我在我的 Android 应用程序上频繁执行某些操作(我的假设,是由于 Toast 消息)时,出现以下错误。我没有得到这个问题的确切位置。我可以从某人那里得到帮助来解决这个问题吗?
--------- beginning of crash
10-04 16:13:49.250 6541-6541/com.test.myapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.test.myapp, PID: 6541
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@e2815e is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:679)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:342)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
at android.widget.Toast$TN.handleShow(Toast.java:459)
at android.widget.Toast$TN$2.handleMessage(Toast.java:342)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
注意:这种崩溃并不总是会发生。
最佳答案
在将 Context
传递给 Toast 之前,您应该始终检查您将要使用的上下文的有效性。在我的应用程序中,我使用了我制作的上下文检查器方法:
public static boolean isContextValid(Context context, Fragment fragment) {
if (context instanceof Activity) {
Activity activity = (Activity) context;
if (activity.isFinishing() || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed())) {
return false;
}
}
return context != null && (fragment == null || (fragment.isAdded() && !fragment.isRemoving());
}
您可以只传递一个上下文,如果您当前的上下文是一个 fragment ,也可以传递一个 Fragment
。此方法检查上下文是否为 Activity
,在这种情况下,我们检查 Activity 是否正在完成/销毁。
如果你想在 fragment 生命周期之后显示 toast,还要传递给当前 fragment 的方法,这样我们就可以判断 fragment 是否仍然可见并附加到 Activity 。
赠送 ANDROID 7.1
在 API 25 上,这还不够,有时设备仍会因您提供的堆栈跟踪而崩溃。
This repository可能是解决方案,因为它将错误调用包装在 try/catch 子句中。当然,这不是最好的做法,但至少解决了 7.1 设备的这个烦人的崩溃问题。
关于安卓.view.WindowManager$BadTokenException : Unable to add window -- at Toast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52649353/
标签上的选定文本
这个问题在这里已经有了答案: How to prevent Multiple Toast Overlaps (8 个答案) 关闭 6 年前。 我有很多按钮。点击它们中的每一个,我都会显示一个 toa
我想为 Windows Phone 8.1 开发一个包含本地“通知”的通用应用程序。 我想要做的是在 toast 控件的扭结中向用户显示所有消息(错误、信息、警告)。 一切都在本地完成,无需通过标准通
有没有办法在 ionic 2 toast 中设置文本消息的样式? 我试过这个: let toast = Toast.create({ message: "Some text on
我有一个附加到按钮的函数,按下该按钮将从数组列表中删除一个项目,然后显示一个提示“项目已删除!”。如果我多次按下删除按钮,那么所有的 toast 都会显示出来,使其看起来像一个非常长的 toast 显
我在这里读到过此类问题,但答案似乎不起作用。 当用户点击按钮时,我会显示一个Toast。当用户连续点击按钮时,即使用户退出 Activity ,toast 也会一次又一次地显示。 toast 的长度很
我有几个可以在 fragment 上单击的按钮。单击每个按钮后,我会显示一条 Toast 消息,每个按钮都完全相同。因此,如果你一个接一个地按下 5 个不同的按钮,你将叠加 5 个 toast 消息,
我有几个 SeekBar 和 onSeekBarProgressStop(),我想显示一个 Toast 消息。 但是,如果在 SeekBar 上我快速执行操作,那么 UI 线程会以某种方式阻塞并且 T
有没有办法在 android 中获取与特定 android Toast 对象关联的消息? toast=Toast.makeText(getAppContext(), message, Toast.LE
我正在创建我的自定义 toast,主要是因为我将它放在 GridView 上并且需要对其宽度进行一些控制。但我真的很喜欢标准 toast 上的淡蓝色光环,并希望恢复它(或者至少让我的自定义 toast
我正在使用 Espresso 测试一个应用程序。我有一个问题,是否可以等到当前没有 toast 显示。我的应用程序中有很多不同的 toast,但是在测试时我遇到了问题,因为据我所知,焦点已经转移到 t
这可能是一个新手问题,但我想知道为什么我们必须使用静态方法 (makeText) 来创建 Toast 而不是构造函数。 为什么我们必须使用这个: makeText(Context context, C
我想显示的 toast 少于 Toast.LENGTH_SHORT,因为我觉得它需要大约 2 秒。我只想显示 toast 半秒。 Toast.LENGTH_SHORT 和 Toast.LENGTH_L
我想向用户显示自定义 toast。但 toast.getView() 和 toast.setView() 在 android studio 中已弃用。 这是我的代码: Toast toast = To
如何在 WorkManager 中显示 toast do work()? 当我尝试时,它会抛出 Caused by: java.lang.RuntimeException: Can't create
我写了一个代码,它工作正常,但没有任何 toast 出现。 Activity 2: package com.example.kiit.questionme2; import android.conte
我刚刚开始学习 Android。我使用我的 MIUI 10 设备进行调试。 我已经学习了非常基础的 App Lifecycle Program。问题是,我正在使用 toasts 来显示何时调用每个方法
我有一条消息在执行后不会消失。我猜这与它处于循环中有关,但我不确定。有人可以帮我弄清楚为什么 toast 消息没有区别吗? @Override public void onClick(View v)
是否可以让手机在您的程序中收到任何 toast 消息时振动?还是必须在每个 toast 上插入振动命令? 干杯。 最佳答案 将此类添加到您的代码中: import android.content.Co
有谁知道为什么这个程序不显示 toast 消息? public class Main extends Activity implements OnClickListener{ /** Called w
我在我的应用程序中打印 Toast 消息以显示通知,但我想知道Toast.LENGTH_LONG 和 Toast.LENGTH_SHORT。我可以使用哪些其他值。 谁能告诉我这两个变量的值是多少? 最
我是一名优秀的程序员,十分优秀!