【发布时间】:2012-09-13 06:29:03
【问题描述】:
我正在开发一个 Android 游戏。在这个游戏中,有火车运行的轨道。这是正在运行的线程。我想在两者之间发生碰撞时显示一个警报对话框。当我应用显示错误的警报对话框时,无法在未调用 looper.prepare() 的线程内创建处理程序。
【问题讨论】:
标签: android android-alertdialog game-loop
我正在开发一个 Android 游戏。在这个游戏中,有火车运行的轨道。这是正在运行的线程。我想在两者之间发生碰撞时显示一个警报对话框。当我应用显示错误的警报对话框时,无法在未调用 looper.prepare() 的线程内创建处理程序。
【问题讨论】:
标签: android android-alertdialog game-loop
这将对您有所帮助:
runOnUiThread(new Runnable() {
@Override
public void run() {
// Your dialog code.
}
});
【讨论】:
您必须需要在 UI 线程中创建 AlertDialog 否则它将永远无法工作。如果你在不同的线程使用MessageHandler或者可以使用runOnUiThread(使用runnable)在里面创建你的对话框。
【讨论】:
您可以使用处理程序来完成这项工作。
Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.post(new Runnable() {
@Override
public void run() {
// Your UI updates here
}
});
【讨论】:
您可以在 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);
}
}
【讨论】:
您必须在 UI 线程上显示您的对话框,如下所示
runOnUiThread(new Runnable() {
@Override
public void run() {
// Your dialog code.
}
});
【讨论】:
你可以试试这个,检查应用是否可见
Activity currentActivity = MainClassApp.getCurrentActivity();
boolean isAppVisible = currentActivity != null;
if (isAppVisible) {
currentActivity.runOnUiThread(() ->
// Your Dialog Code
}
【讨论】: