8

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

4

6 回答 6

15

这将帮助您:

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        // Your dialog code.
    }
});
于 2012-09-13T06:33:24.250 回答
11

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

于 2012-09-13T06:32:47.433 回答
7

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

Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.post(new Runnable() {
    @Override
    public void run() {
        // Your UI updates here
    }
});
于 2012-09-13T06:36:53.220 回答
6

您可以在 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);
    }
}
于 2012-09-13T06:41:48.693 回答
2

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

runOnUiThread(new Runnable() {
                @Override
                public void run() {
                // Your dialog code.
                }
            });
于 2012-09-13T06:31:49.590 回答
0

你可以试试这个,检查 App is visible

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

if (isAppVisible) {
    currentActivity.runOnUiThread(() -> 
    // Your Dialog Code 
}
于 2018-11-22T05:44:59.277 回答