【问题标题】:Toast messages disappearing very fast吐司消息消失得很快
【发布时间】:2021-10-06 15:51:20
【问题描述】:

onResume() 方法中,我使用new Handler() 创建警报对话框,并从我的警报对话框onClick 方法中调用Wifi 系统设置Activity 并在其后显示Toast

@Override
protected void onResume()
{
    super.onResume();
    new Handler(Looper.getMainLooper()).post(new Runnable() {
        @Override
        public void run() {
            showDialog();
        } }); 
}


private void showDialog()
{
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    builder.setTitle("Alert Dialog");
    builder.setMessage("Go to wifi settings and display Toast over it");
    DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch(which){
                case DialogInterface.BUTTON_POSITIVE:
                    Intent intent = newIntent(Settings.ACTION_WIFI_SETTINGS); 
                    startActivityForResult(intent, 1);
                    String toastText = "Display Toast";
                    Toast.makeText(getApplicationContext(), toastText, Toast.LENGTH_LONG).show();
                    break;

                 case DialogInterface.BUTTON_NEGATIVE:
                    dialog.cancel();
                    break;
            }
        }
    };


                builder.setPositiveButton("Continue", dialogClickListener);
                builder.setNegativeButton("Cancel",dialogClickListener);
                AlertDialog dialog = builder.create();
                dialog.setCancelable(false);
                dialog.show();
}

在 Wifi 系统设置 Activity 启动后,Toast 消息立即消失。 吐司应该持续 3.5 秒。我已经看到我的吐司在 1 秒内消失了。因此,我决定在新的 hello world 项目 onCreate 方法上对其进行测试,并使用以下代码行:

startActivityForResult(new Intent(Settings.ACTION_WIFI_SETTINGS), 1);
Toast.makeText(getApplicationContext(), "Display Toast", Toast.LENGTH_LONG).show();

现在,Toast 行为正常,持续 3.5 秒。然后我再次在原始项目上测试了 Toast 消息,但这一次,我将 Toast 消息放在 onCreate 方法中。启动我的应用程序,快速单击警报对话框按钮,打开 Wifi 系统设置后 Toast 仍然立即消失。 我怀疑这是因为我使用 Handler + dialog onClick 来调用 startActivityForResult(Intent, 1)。也许是线程问题,我的手机(诺基亚 2.2,Android 11)问题或其他问题,但是,这是奇怪的 Toast 行为。如果您对此有解决方案,或者我可以尝试任何建议,请告诉我,我将不胜感激。

编辑:在我的 logcat 中找到了这个。 2021-07-31 23:16:53.165 1025-1568/? W/NotificationService: Toast 已经被杀死。 pkg=com.example.android token=android.os.BinderProxy@afaf53e 做了一些研究,似乎 Android 系统活动错误地将我的 Toast 用于定制 Toast(自定义 Toast 自 android 11 以来被阻止),没有理由这样做。我会再尝试一些东西,但现在,我的结论是,这是新 Toast 行为的错误。

【问题讨论】:

  • 不是线程问题。我认为这是由于 11 的吐司行为变化。
  • @AbhayKoradiya 可能是,我会检查旧的 Android 版本

标签: android android-alertdialog handler toast android-toast


【解决方案1】:

尝试使用 if-else 切换 switch(),看看它是否工作。也许break; 语句正在操纵 Toast(它不应该或者问题可能出在其他地方,但请尝试一下 :))。

【讨论】:

  • 遗憾的是,没有修复它,但绝对值得一试。
  • 那肯定是Android 11的问题。当应用程序在后台时,它会更改 Toast 行为。您正在打开 WIfi 设置,此时,您的应用程序会进入后台一段时间。这就是 Toast 被取消的原因。您是否在 Android 11 以下的不同设备上检查过它?
  • 在 bluestacks 5 上测试过,效果很好。是的,你是对的,如果应用程序在后台,Toast 会被阻止,但我的应用程序应该被视为前台,因为它的最后一个活动在 1 秒前关闭。可能是错的,但我认为对话或 Toast 行为不端。
猜你喜欢
  • 2021-09-06
  • 1970-01-01
  • 2021-10-06
  • 2015-01-26
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
相关资源
最近更新 更多