如何在正在运行的线程中显示警报对话框?

Posted

技术标签:

【中文标题】如何在正在运行的线程中显示警报对话框?【英文标题】:How to show alert dialog in a running thread? 【发布时间】:2012-09-13 06:29:03 【问题描述】:

我正在开发一个 android 游戏。在这个游戏中,有火车运行的轨道。这是正在运行的线程。我想在两者之间发生碰撞时显示一个警报对话框。当我应用显示错误的警报对话框时,无法在未调用 looper.prepare() 的线程内创建处理程序。

【问题讨论】:

【参考方案1】:

这将对您有所帮助:

runOnUiThread(new Runnable() 
    @Override
    public void run() 
        // Your dialog code.
    
);

【讨论】:

当我在我的代码中添加 runOnUiThread 时显示错误:- 方法 runOnUiThread(new Runnable()) 对于 MainGamePanel 类型未定义【参考方案2】:

您必须需要在 UI 线程中创建 AlertDialog 否则它将永远无法工作。如果你在不同的线程使用MessageHandler或者可以使用runOnUiThread(使用runnable)在里面创建你的对话框。

【讨论】:

【参考方案3】:

您可以使用处理程序来完成这项工作。

Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.post(new Runnable() 
    @Override
    public void run() 
        // Your UI updates here
    
);

【讨论】:

应该是mHandler。编辑它。谢谢...:) 你需要初始化变量Handler mHandler= new Handler();【参考方案4】:

您可以在 Activity 类中创建一个处理程序,并可以调用 sendMessage 到该处理程序对象。编写代码在Handler的handleMessage方法中显示alert,例如:

活动类

Handler mHandler = new Handler()

    public void handleMessage(Message msg)
    
       //Display Alert
    
;

//Thread

Thread thread= new Thread()

    public void run()
    
         //Logic
         MHandler.sendEmptyMessage(0);
    

【讨论】:

【参考方案5】:

您必须在 UI 线程上显示您的对话框,如下所示

runOnUiThread(new Runnable() 
                @Override
                public void run() 
                // Your dialog code.
                
            );

【讨论】:

【参考方案6】:

你可以试试这个,检查应用是否可见

Activity currentActivity = MainClassApp.getCurrentActivity();
boolean isAppVisible = currentActivity != null;

if (isAppVisible) 
    currentActivity.runOnUiThread(() -> 
    // Your Dialog Code 

【讨论】:

以上是关于如何在正在运行的线程中显示警报对话框?的主要内容,如果未能解决你的问题,请参考以下文章

如何进行类似警报的同步警报/确认对话框

警报对话框 - 如何?

如何在 SwiftUI 中一个接一个地显示多个警报对话框?

单击列表视图时如何显示警报对话框

单击列表视图时如何显示警报对话框

Flutter - 自定义警报对话框未显示